【发布时间】:2013-04-02 05:58:56
【问题描述】:
我搜索了将 IplImage* 转换为 Mat,但所有答案都是关于转换为 cvMat。
怎么样,我能做到吗? Mat和cvMat有什么区别?
提前致谢
【问题讨论】:
-
关于 cvMat 和 Mat ,见链接:stackoverflow.com/questions/11037798/…
我搜索了将 IplImage* 转换为 Mat,但所有答案都是关于转换为 cvMat。
怎么样,我能做到吗? Mat和cvMat有什么区别?
提前致谢
【问题讨论】:
【讨论】:
// converts old-style IplImage to the new matrix; the data is not copied by default
Mat(const IplImage* img, bool copyData=false);
【讨论】:
这是一个很好的解决方案
Mat(const IplImage* img, bool copyData=false);
【讨论】:
作为记录:查看 core/src/matrix.cpp 似乎确实构造函数 cv::Mat(IplImage*) 已经消失了。
但我找到了这个替代方案:
IplImage * ipl = ...;
cv::Mat m = cv::cvarrToMat(ipl); // default additional arguments: don't copy data.
【讨论】:
cv::Mat 或 Mat,两者相同。
Mat 有一个操作符 CvMat(),所以简单的赋值就可以了
将 Mat 转换为 CvMat
Mat mat = ---------;
CvMat cvmat = mat;
将 CVMat 转换为 Mat
Mat dst = Mat(cvmat, true);
将 Mat 转换为 IplImage*
>单频道
IplImage* image = cvCloneImage(&(IplImage)mat);
> 三通道
IplImage* image = cvCreateImage(cvSize(mat.cols, mat.rows), 8, 3);
IplImage ipltemp = mat;
cvCopy(&ipltemp, image);
希望这对您有所帮助。干杯:)
【讨论】: