標籤:des style blog http color os io for
本人的學習筆記主要記錄的是學習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 npimport cv2img = 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類型,就好了
至於此處的問題,大家自己理解吧,我這說不清楚
今天第一天,並沒有多少硬貨。加油!