opencv中一些类型转换至关重要,对于后面学习opencv矩阵运算和后面图像处理起到打基础的作用。如果你的程序出现bug,有可能就是因为你类型转换不当。下面将简单介绍一下opencv中的Mat,CvMat、CVMat*和IpIImage之间的类型转换。
1、CvMat*<--->Mat的转换
1)CvMat*--->Mat
CvMat* H=cvCreateMat(int rows,int cols,int type);
cv::Mat H1=Mat(H,false);
2)CvMat*<---Mat
CvMat* H=cvCreateMat(int rows,int cols,int type);
Mat H1;
H= (CvMat*)&H1;
2、Mat <---> CvMat
1) Mat ---> CvMat
Mat H1;
CvMat H2;
CvMat H2= H1;
2)Mat <--- CvMat
Mat H1;
CvMat H2;
H 1= Mat(&H2);
3、CvMat*<---CvMat
CvMat H2;
CvMat *H= cvGetMat( H, &H2);
4、IplImage <----->cvMat
1)IplImage ----->cvMat
IplImage* img = cvCreateImage(cvGetSize(image),8,1);
CvMat * H=cvCreateMat(img->height,img->width,CV_64FC3);
cvConvert(img,H);
2)IplImage <-----cvMat
//法一:cvGetImage函数
CvMat M;
IplImage* img = cvCreateImageHeader(M.size(), M.depth(), M.channels());
cvGetImage(&M, img); //深拷贝:函数返回img
//也可写成
CvMat M;
IplImage* img = cvGetImage(&M, cvCreateImageHeader(M.size(), M.depth(), M.channels()));
//法二:cvConvert函数
CvMat M;
IplImage* img = cvCreateImage(M.size(), M.depth(), M.channels());
cvConvert(&M, img); //深拷贝
5、double类型矩阵转换成CvMat*类型
double mat[3][4] = { 1,1,1,1,
2,2,2,2,
3,3,3,3
};
CvMat* H = cvCreateMat(3, 4,CV_64FC1);
cvInitMatHeader(H, 3, 4,CV_64FC1,mat);