c++ - Can I provide readonly access to an OpenCV matrix? -
i have class combines number of opencv's cv::mat matrices.
is there way can provide both const accessors allowing clients read not write underlying data, , non-const accessors allowing clients read , write data.
i'm thinking of doing this:
class myclass { cv::mat a; public: cv::mat a() { return a; } const cv::mat& a() const { return a; } }; but protect underlying data being modified through const accessor? or protect cv::mat's header data?
if forced provide access cv::mat object itself, out of luck. data access through data pointer possible on const cv::mat. thus, code:
const cv::mat test = cv::mat::ones(3, 3, cv_8uc1); test.data[3] = 4; will compile , execute.
however, if need provide access data, provide wrapper functions cv::mat::begin() , cv::mat::end(), allow read-only access on const cv::mat:
class myclass { cv::mat a; public: cv::matiterator_<uchar> begin() {return a.begin<uchar>();} cv::matconstiterator_<uchar> begin() const {return a.begin<uchar>();} cv::matiterator_<uchar> end() {return a.end<uchar>();} cv::matconstiterator_<uchar> end() const {return a.end<uchar>();} }; myclass m; const myclass& mref = m; auto = mref.begin(); *it = 4; //compile error here for example used uchar data type, it's easy enough make these pass along template parameter.
Comments
Post a Comment