IplImage -> cv::Mat
IplImage* iplImg = cvLoadImage("lena.jpg");
cv::Mat cvMatImg(iplImg, 0);
cv::imshow("cv::Mat Show", cvMatImg);
cv::Mat -> IplImage
IplImage iplImg2;
iplImg2= IplImage(cvMatImg);
cvShowImage("IplImage2 Show", &iplImg2);
在第一個範例中,我們可以看到 cv::Mat 的建構子有兩個參數,比較重要的是第二個參數,如果設定成 0,代表不複製影像,也就是兩個變數的 row data 共用同個記憶體位置,header 則各自有。接著,第二個範例,從第二行可以看到 cv::Mat 呼叫成員函式 operator IplImage(),至於行為上就沒得選擇,一定是 row data 共用同個記憶體位置,header 各自有。
底下是 operator IplImage() 的實作內容,定義在 cxmat.hpp;類別則宣告在 cxcore.hpp...
inline Mat::operator IplImage() const
{
IplImage img;
cvInitImageHeader(&img, size(), cvIplDepth(flags), channels());
cvSetData(&img, data, (int)step);
return img;
}

1 則留言:
張貼留言