CvMat Mat IplImage之間的轉換

2021-09-21 14:21:39 字數 2139 閱讀 8347

**:

opencv中常見的與影象操作有關的資料容器有mat,cvmat和iplimage,他們都可以顯示影象,但是,mat型別側重於計算,數學性較高。而cvmat和iplimage型別更側重於「影象」。在opencv2.0之前,opencv的庫函式是完全用c實現的。其中mat是opencv和c++的介面矩陣類,iplimage是opencv和c語言的介面的結構體。

1、iplimage與mat之間轉換

1.1、 iplimage—>mat

//淺拷貝:

iplimage* pbinary=cvloadimage("c:",0);

mat img;

img=cvarrtomat(pbinary);

//深拷貝:

iplimage* pbinary=cvloadimage("c:", 0);

mat imgtemp;

img=cvarrtomat(pbinary);

mat img = imgtemp.clone();

1.2、 mat—>iplimage

//淺拷貝:

//深拷貝:

iplimage *input = cvcloneimage(pbinary);

2、iplimage與cvmat之間轉換

1.1、 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); //深拷貝

2.2、 cvmat—>iplimage

//法一:cvgetimage函式

cvmat m;

iplimage* img = cvcreateimageheader(m.size(), m.depth(), m.channels());

cvgetimage(&m, img); //深拷貝:函式返回img

//法二:cvgetimage函式

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); //深拷貝

3、mat 與cvmat之間轉換

3.1 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

3.2 mat—>cvmat

//注意:淺拷貝

mat a;

cvmat b = a; //a "copy" to b

//注意: 深拷貝

mat a;

cvmat *b;

cvmat temp = a; //轉化為cvmat型別,而不是複製資料

cvcopy(&temp, b); //真正複製資料 cvcopy使用前要先開闢記憶體空間

char, WCHAR, CString之間的轉換

1.char wchar multibytetowidechar int convertchartowchar char pmultibytestr,wchar pwidecharstr,size t bytesofwidecharstr 2.wchar char widechartomultiby...

Gbps Mbps Bps bps之間的進製轉換

首先要講述下位 bit 與位元組 b 的區別 二者有著本質的區別應該注意 1b 1bit 1b 1b 也就是我們常說的乙個位元組等於八位二進位制數網路傳輸速度單位 mbps 即 milionbit pro second 百萬位每秒 kbps 即 kilobit pro second 千位每秒 bps...

Python int與string之間的轉化

string int 1 10進製string轉化為int int 12 2 16進製制string轉化為int int 12 16 int string 1 int轉化為10進製string str 18 2 int轉化為16進製制string hex 18 考慮,為什麼沒有16進製制int轉化為...