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


使用opencv-python一段時間了,因為之前沒有大量接觸過c++下的opencv,在網上看c++的一些程序想改成python遇到了不少坑,正好在這里總結一下。

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

    opencv中圖像的x,y 坐標以及 height, width,rows,cols 他們的關系經常混淆。

    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形式。

  • 3.函數上的應用的不同處

  在opencv-python中,有很多函數的應用方法都與opencv中不同,下面簡單的分析一下最不同的地方

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

   2)對於具有同樣作用的函數的不同調用方法,例如

 

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

 

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

    當然對於每個具體的函數的具體用法,可以自行上網搜索

   3)python中對於變量的類型是不需要聲明的,所以將c++中代碼修改為python時需要注意很多(縮進雖然很便於查看,但是還是感覺寫{}的感覺很爽233)

   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吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM