Mat物件的使用及注意事項

2021-08-03 10:18:33 字數 2066 閱讀 9412

1,什麼是mat物件 ,見下圖

mat物件封裝了影象在記憶體中的資訊,用於表示一副載入到記憶體中的影象,是opencv2.0以後引入的

相比之前的ipimage物件,具有自動分配記憶體,不存在記憶體洩漏的優點,mat物件分為頭部與資料部分。

2,mat物件的使用

因為mat物件分為頭部和資料兩部分,所以當複製mat物件時有兩種情況

1,完全複製:就是把mat物件的頭部和資料部分完全複製  可以通過 clone()和copyto兩個api實現

比如mat dst=src.clone() 或者  src.copyto(dst)

2,部分複製:只複製mat物件的頭和指標部分,不複製資料

比如 mat src=imread("path"),mat dst(src) 

3,注意事項

1,mat物件輸出影象的記憶體是自動分配的,無需考慮記憶體分配問題

2,賦值操作和拷貝建構函式只會複製頭部

3,完全複製只能通過clone和copyto實現

4,mat物件的建立

mat m(2,2,cv_8uc3,scalar(0,0,255))

前兩個引數分別表示行(row)跟列(column)也就是影象的寬,高,cv_8uc3中的8表示每個通道佔8位

u表示無符號,c表示char型別,3表示影象的通道是數目是3,scalar(0,0,255)用於初始化每個畫素通道的值

這是個向量,向量的維度和影象的通道數目保持一致。

演示**

//建立顯示視窗

namedwindow("input",cv_window_autosize);

//imshow("input",src);

//mat dst;

//dst = mat(src.size(),src.type());

//dst = scalar(127,0,255);//初始化每個畫素bgr通道的值

//namedwindow("output-1", cv_window_autosize);

//imshow("output-1",dst);

mat dst;

//namedwindow("output-2", cv_window_autosize);

//imshow("output-2",dst);

cvtcolor(src,dst,cv_bgr2gray);

printf("input image channel:%d\n", src.channels());

printf("output image channel:%d\n",dst.channels());

int cols = dst.cols;

int rows = dst.rows;

//輸出影象的寬,高

printf("rows:%d cols:%d",rows,cols);

//獲取第0行第乙個畫素的值

const uchar* firstrow = dst.ptr(0);

printf("first pixel value:%d\n",*firstrow);

mat m(10,10,cv_8uc1,scalar(127));

cout << "m=" << endl << m << endl;

waitkey(0);

return 0;

}

wllvm使用及注意事項

export llvm compiler llvm gcc export llvm gcc prefix export llvm compiler path path to llvm 2.9 release asserts bin 這裡不能填llvm gcc的路徑,不然在extract bc的時候會...

WFP TreeView使用及注意事項

最近接手wpf的專案,從0開始,做些積累 hierarchicaldatatemplate hierarchicaldatatemplate顧名思義,分層資料模板,就是用來定義分層資料樣式的模板,一般多用於menuitem和treeviewitem datatype指定模板用於哪種資料型別 item...

C C 建立物件及注意事項

c 的物件建立方式有3種,詳細見以下 所示。include using namespace std class test test int main 三種方式中,第一種和第二種分別為隱式呼叫和顯示呼叫,兩者都是在程序的虛擬位址空間的棧空間中分配記憶體。第三種方式使用了關鍵字new,是在堆空間中分配記...