OpenCV for Python 學習筆記 一


本人的學習筆記主要記錄的是學習opencv-python-tutorials這本書中的筆記

今天晚上簡單學習OpenCV for Python如何繪圖,主要用了這幾個函數(這幾個函數可在:http://docs.opencv.org/modules/core/doc/drawing_functions.html 找到):

cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) 
cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]]) 
cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]]) 
cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]]) 
cv2.polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]]) 

一開始自己照抄書上代碼,代碼如下:

import numpy as np
import cv2

img = np.zeros((512,512,3), np.uint8)
img = cv2.line(img, (1,1),(510,510), (255,0,0),5)
img = cv2.rectangle(img, (200,100), (100,200), (0,255,0), 3)
img = cv2.circle(img, (100,100), 63, (0,0,255), -1)
img = cv2.ellipse(img, (256,256), (100,50), 0, 0, 180, 255, -1)
cv2.imshow('hello', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

總是在運行到cv2.imshow()這出錯,錯誤代碼:

error: (-215) size.width>0 && size.height>0 in function imshow

大致意思是要求img的尺寸必須是大於0的,可是書上是這么寫的啊?

回想在C里面用OpenCV繪圖時,直接調用繪圖函數即可,貌似不需要加返回值,於是自己嘗試着去掉返回值,每次都是直接在img上繪圖,沒有返回值

cv2.line(img, (1,1),(510,510), (255,0,0),5)
cv2.rectangle(img, (200,100), (100,200), (0,255,0), 3)
cv2.circle(img, (100,100), 63, (0,0,255), -1)
cv2.ellipse(img, (256,256), (100,50), 0, 0, 180, 255, -1)

果然就可以了

自己想了想,如果將返回值賦值img,那么img表示的應該是繪圖是否成功的標志,而不是img本身了

上網搜了搜,在:http://docs.opencv.org/modules/core/doc/drawing_functions.html 找到了官網的注釋,說這些函數的返回值都是None(難怪不能imshow)

這個問題解決了,開始繪制多邊形

加了下面的代碼:

pts = np.array([[10,5], [34,23],[231,54], [76,98]], np.uint8)
pts = pts.reshape((-1,1,2))
cv2.polylines(img, [pts], True, (0,255,255))

又出錯。。

error: (-215) p.checkVector(2, CV_32S) >= 0 in function polylines

google之,http://stackoverflow.com/questions/11270250/what-does-the-python-interface-to-opencv2-fillpoly-want-as-input 解決方法如下:

將最后一行改成如下形式:

cv2.polylines(img, np.array([pts], np.int32), True, (0,255,255))

將[pts]轉換成32int的numpy.array類型,就好了

至於此處的問題,大家自己理解吧,我這說不清楚

今天第一天,並沒有多少硬貨。加油!


免責聲明!

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



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