天天看點

OpenCV cheatsheetOpenCV cheatsheet

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指定大小而通路導緻