矩阵和图像类型(Mat; CvMat; IplImage 的相互转化)

在开始学习OpenCV的矩阵和图像类型之前,我们需要知道

两件事情

  1. 在OpenCV中没有向量(vector)结构,任何时候需要向量,都只需要一个列矩阵(如果需要一个转置或共轭向量,则需要一个行矩阵);
  2. OpenCV矩阵的概念与我们在线性代数课上学习的概念相比,更抽象,尤其是矩阵的元素,并非只能取简单的数值类型,可以是多通道的值。

CvArr; CvMat; IplImage 的关系:

IplImage派生于CvMat, CvMat又派生于CvArr;

矩阵和图像类型(Mat; CvMat; IplImage 的相互转化)_第1张图片

IplImage详解:https://blog.csdn.net/MRZHUGH/article/details/83537490

CvMat详解:https://blog.csdn.net/MRZHUGH/article/details/83537503

Mat详解:https://blog.csdn.net/MRZHUGH/article/details/83537519

Mat; CvMat; IplImage 的相互转化:

/*IplImage转化成Mat*/
IplImage* srcImg = cvLoadImage("I_M.jpg");

Mat M(srcImg);
Mat M(srcImg, false);//false改成true是深拷贝
Mat M = srcImg;
 
/*Mat转化成IplImage*/
Mat M;
IplImage img = M;
IplImage img = IplImage(M);

/*IplImage转化成CvMat*/

//通过cvGetMat函数实现
IplImage* img;
CvMat temp;
CvMat* mat = cvGetMat(img, &temp);

//通过cvConvert函数实现
CvMat *mat = cvCreateMat(img->height, img->width, CV_64FC3);
cvConvert(img, mat);	

/*CvMat转化成IplImage*/

//通过cvGetImage函数实现
CvMat M;
IplImage* img = cvCreateImageHeader(M.size(), M.depth(), M.channels());
cvGetImage(&M, img);

//通过cvConvert函数实现
CvMat M;
IplImage* img = cvCreateImage(M.size(), M.depth(), M.channels());
cvConvert(&M, img);

革命尚未成功,同志仍需努力。

 

你可能感兴趣的:(OpenCV)