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,是在堆空間中分配記...