1. 程式人生 > >矩陣和影象型別(Mat; CvMat; IplImage 的相互轉化)

矩陣和影象型別(Mat; CvMat; IplImage 的相互轉化)

在開始學習OpenCV的矩陣和影象型別之前,我們需要知道

兩件事情

  1. 在OpenCV中沒有向量(vector)結構,任何時候需要向量,都只需要一個列矩陣(如果需要一個轉置或共軛向量,則需要一個行矩陣);
  2. OpenCV矩陣的概念與我們線上性代數課上學習的概念相比,更抽象,尤其是矩陣的元素,並非只能取簡單的數值型別,可以是多通道的值。

CvArr; CvMat; IplImage 的關係:

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

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

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