矩陣和影象型別(Mat; CvMat; IplImage 的相互轉化)
阿新 • • 發佈:2018-12-18
在開始學習OpenCV的矩陣和影象型別之前,我們需要知道
兩件事情:
- 在OpenCV中沒有向量(vector)結構,任何時候需要向量,都只需要一個列矩陣(如果需要一個轉置或共軛向量,則需要一個行矩陣);
- 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);
革命尚未成功,同志仍需努力。