opencv类型转换

来源:互联网 发布:目的论 知乎 编辑:程序博客网 时间:2024/06/05 06:28

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);


0 0
原创粉丝点击