OpenCV cheatsheet
構造
生成随機矩陣
Mat m(100,200,CV_8U);
randu(m,0,255); // 用0~255中的随機數填充m
打開攝像頭
請使用opencv > 3.3.1.11版本
while True:
ret, frame = cap.read()
cv2.imshow('frame', frame) # 一個視窗用以顯示原視訊
if cv2.waitKey(1) & 0xFF == ord('q'):
break
畫
矩形
類型
opencv中給出了很多種表示類型的方法,比如在
cv::Mat
的構造函數中
就給出了一個3 channel的
unchar
數組,此處的CV_8U3其實是CV中define的一個整數
作為模闆的參數,則不可使用,如果用模闆構造一個一樣的矩陣,應該是
初始化
可以使用指派對一些array進行初始化,向量可以用{a,b,c}初始化,點可以用{a,b}初始化,數組可以用常值初始化
計時
double t = (double)cv::getTickCount();
/*
some code
*/
t = ((double)cv::getTickCount()-t)/cv::getTickFrequency();
仿射變換
其中 W W W是一個2*3的矩陣(即預設第三行是0,0,1),如果要單純進行旋轉,可以通過
來得到 W W W
透明mask
用
dst=cv2.addWeighted(src1,alpha,src2,beta,gamma)
dst = src1alpha + src2beta + gamma;
分割通道
Mat aChannels[3];
split(img, aChannels);
取某一區域
Rect rect(50,20, 200, 50);
Mat ROI = img(rect);
0~1和uint8轉換
for(int i =0;i<rows;i++){
for(int j = 0;j<cols;j++){
imgGrayF32(i,j) = imgGray(i,j)/255.;
}
}
盡管Mat.convertTo可以進行轉化,但是轉換後的圖imshow全白不知道怎麼回事
但是反過來想把F32轉成u8卻可以
取多通道圖檔的元素
正确做法
錯誤做法
錯誤
[1] 6356 segmentation fault (core dumped)
可能由于沒有給Mat指定大小而通路導緻