赞
踩
1. 调用Mat的构造函数或者create函数,如:
- // make a 7x7 complex matrix filled with 1+3j.
- Mat M(7,7,CV_32FC2,Scalar(1,3));
- // and now turn M to a 100x60 15-channel 8-bit matrix.
- // The old content will be deallocated
- M.create(100,60,CV_8UC(15));
2. 调用拷贝构造函数或赋值操作符。注意,调用拷贝构造函数或赋值操作符时,只会拷贝Mat的头部,并增加reference count,并不会真正拷贝数据。如果要进行数据拷贝,可以调用clone或copyTo函数。
- Mat M1(M);
- Mat M2 = M;
-
- Mat M3 = M.clone();
- Mat M4;
- M.copyTo(M4);
这里的M1, M2与M共用同一处数据;而M3,M4是拷贝了M的数据。
3. 给user-allocated数据增加头部信息。如:
- void process_video_frame(const unsigned char* pixels,
- int width, int height, int step)
- {
- Mat img(height, width, CV_8UC3, pixels, step);
- GaussianBlur(img, img, Size(7,7), 1.5, 1.5);
- }
另外,可以调用Mat::operator CvMat() 和Mat::operator IplImage()将CvMat和IplImage转换成Mat:
- IplImage* img = cvLoadImage("greatwave.jpg", 1);
- Mat mtx(img); // convert IplImage* -> Mat
- CvMat oldmat = mtx; // convert Mat -> CvMat
参考:
http://docs.opencv.org/modules/core/doc/basic_structures.html#mat
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。