使用opencv-python一段時間了,因為之前沒有大量接觸過c++下的opencv,在網上看c++的一些程式想改成python遇到了不少坑,正好在這裡總結一下。 1.opencv 中x,y,height, width,rows,cols 的關係(轉自http://blog.csdn.net/ik ...
使用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.補充(以下均為原創):
- opencv python中的rows cols分別為img.shape[0]和img.shape[1]
- 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吧。