在开始学习OpenCV的矩阵和图像类型之前,我们需要知道
两件事情:
- 在OpenCV中没有向量(vector)结构,任何时候需要向量,都只需要一个列矩阵(如果需要一个转置或共轭向量,则需要一个行矩阵);
- OpenCV矩阵的概念与我们在线性代数课上学习的概念相比,更抽象,尤其是矩阵的元素,并非只能取简单的数值类型,可以是多通道的值。
CvArr; CvMat; IplImage 的关系:
IplImage派生于CvMat, CvMat又派生于CvArr;
IplImage详解:https://blog.youkuaiyun.com/MRZHUGH/article/details/83537490
CvMat详解:https://blog.youkuaiyun.com/MRZHUGH/article/details/83537503
Mat详解:https://blog.youkuaiyun.com/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);
革命尚未成功,同志仍需努力。