opencv-python與c++ opencv中的一些區別和基礎的知識

使用opencv-python一段時間了,由於以前沒有大量接觸過c++下的opencv,在網上看c++的一些程序想改爲python遇到了很多坑,正好在這裏總結一下。python

  • 1.opencv 中x,y,height, width,rows,cols 的關係(轉自http://blog.csdn.net/ikerpeng/article/details/41846259)

    opencv中圖像的x,y 座標以及 height, width,rows,cols 他們的關係常常混淆。c++

    rows 其實就是行,一行一行也就是y 啦。height高度也就是y啦。數組

    cols  也就是列,一列一列也就是x啦。width寬度也就是x啦。   函數

  • 2.補充(如下均爲原創):

  1. opencv python中的rows cols分別爲img.shape[0](height)和img.shape[1](width)
  2. opencv c++中的圖像對象訪問像素可以使用.at :cv::mat的成員函數: .at(int y, int x),能夠用來存取圖像中對應座標爲(x,y)的元素座標。可是在使用它時要注意,在編譯期必需要已知圖像的數據類型.但在opencv-python中訪問像素可直接使用例如img[x][y] 的方法進行實現

  緣由:和opencv不一樣,目前opencv-python中的數組均爲numpy array形式。spa

  • 3.函數上的應用的不一樣處

  在opencv-python中,有不少函數的應用方法都與opencv中不一樣,下面簡單的分析一下最不一樣的地方.net

   1)python中使用cv2.方法名或變量名來調用方法/變量code

   2)對於具備一樣做用的函數的不一樣調用方法,例如對象

 

//c++
cvtColor(srcImg, binaryImg, COLOR_BGR2GRAY);

 

#python
binaryImg = cv2.cvtColor(srcImg,cv2.COLOR_BGR2GRAY)

    固然對於每一個具體的函數的具體用法,能夠自行上網搜索blog

   3)python中對於變量的類型是不須要聲明的,因此將c++中代碼修改成python時須要注意不少(縮進雖然很便於查看,可是仍是感受寫{}的感受很爽233)ci

   4)python中函數參數能夠爲array形式,因此c++ opencv中的不少類型都是不存在的,切記使用cv2.類型名()去使用,例如

//c++
circle(srcImg, Point(x, y), 3, Scalar(255, 0, 255), 2, 8, 0);
#python
cv2.circle(srcImg, (x, y), 3, (255, 100, 255), 1, 8, 0)

   其餘的小坑估計還不少,多Google吧。

相關文章
相關標籤/搜索