日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

CvMat,Mat和IplImage之间的转化和拷贝

發布時間:2023/11/27 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CvMat,Mat和IplImage之间的转化和拷贝 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、CvMat之間的復制

``` //注意:深拷貝 - 單獨分配空間,兩者相互獨立 CvMat* a; CvMat* b = cvCloneMat(a); //copy a to b ```

2、Mat之間的復制

//注意:淺拷貝 -  不復制數據只創建矩陣頭,數據共享(更改a,b,c的任意一個都會對另外2個產生同樣的作用)
Mat a;
Mat b = a; //a "copy" to b
Mat c(a); //a "copy" to c//注意:深拷貝
Mat a;
Mat b = a.clone(); //a copy to b
Mat c;
a.copyTo(c); //a copy to c

3、CvMat轉Mat

//使用Mat的構造函數:Mat::Mat(const CvMat* m, bool copyData=false);    默認情況下copyData為false
CvMat* a;
//注意:以下三種效果一致,均為淺拷貝
Mat b(a);    //a "copy" to b
Mat b(a, false);    //a "copy" to b
Mat b = a;    //a "copy" to b//注意:當將參數copyData設為true后,則為深拷貝(復制整個圖像數據)
Mat b = Mat(a, true); //a copy to b

4、Mat轉CvMat

//注意:淺拷貝
Mat a;
CvMat b = a; //a "copy" to b//注意:深拷貝
Mat a;
CvMat *b;
CvMat temp = a; //轉化為CvMat類型,而不是復制數據
cvCopy(&temp, b); //真正復制數據 cvCopy使用前要先開辟內存空間

==========IplImage與上述二者間的轉化和拷貝===========

1、IplImage之間的復制
這個不贅述了,就是cvCopy與cvCloneImage使用區別,貼張網上的圖:

2、IplImage轉Mat

//使用Mat的構造函數:Mat::Mat(const IplImage* img, bool copyData=false);    默認情況下copyData為false
IplImage* srcImg = cvLoadImage("Lena.jpg");
//注意:以下三種效果一致,均為淺拷貝
Mat M(srcImg);
Mat M(srcImg, false);
Mat M = srcImg;//注意:當將參數copyData設為true后,則為深拷貝(復制整個圖像數據)
Mat M(srcImg, true);

3、Mat轉IplImage

//注意:淺拷貝 - 同樣只是創建圖像頭,而沒有復制數據
Mat M;
IplImage img = M;
IplImage img = IplImage(M);
//深拷貝
cv::Mat img2;
IplImage imgTmp = img2;
IplImage *input = cvCloneImage(&imgTmp);

4、IplImage轉CvMat

//法一:cvGetMat函數
IplImage* img;
CvMat temp;
CvMat* mat = cvGetMat(img, &temp);    //深拷貝
//法二:cvConvert函數
CvMat *mat = cvCreateMat(img->height, img->width, CV_64FC3);    //注意height和width的順序
cvConvert(img, mat);    //深拷貝

5、CvMat轉IplImage

//法一:cvGetImage函數
CvMat M;
IplImage* img = cvCreateImageHeader(M.size(), M.depth(), M.channels());
cvGetImage(&M, img);    //深拷貝:函數返回img
//也可寫成
CvMat M;
IplImage* img = cvGetImage(&M, cvCreateImageHeader(M.size(), M.depth(), M.channels()));
//法二:cvConvert函數
CvMat M;
IplImage* img = cvCreateImage(M.size(), M.depth(), M.channels());
cvConvert(&M, img);    //深拷貝

總結

以上是生活随笔為你收集整理的CvMat,Mat和IplImage之间的转化和拷贝的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。