這次我試着從Solem's blog的另一個例子。它是一個通過使用霍夫變換來檢測圖像中的線和圓的模塊。 下面是代碼(houghlines.py):python TypeError:'NoneType'對象沒有屬性'__getitem__'
execfile('houghlines.py')
以下錯誤出現:
import numpy as np
import cv2
"""
Script using OpenCV's Hough transforms for reading images of
simple dials.
"""
# load grayscale image
im = cv2.imread("house2.jpg")
gray_im = cv2.cvtColor(im, cv2.COLOR_RGB2GRAY)
# create version to draw on and blurred version
draw_im = cv2.cvtColor(gray_im, cv2.COLOR_GRAY2BGR)
blur = cv2.GaussianBlur(gray_im, (0,0), 5)
m,n = gray_im.shape
# Hough transform for circles
circles = cv2.HoughCircles(gray_im, cv2.cv.CV_HOUGH_GRADIENT, 2, 10, np.array([]), 20, 60, m/10)[0]
# Hough transform for lines (regular and probabilistic)
edges = cv2.Canny(blur, 20, 60)
lines = cv2.HoughLines(edges, 2, np.pi/90, 40)[0]
plines = cv2.HoughLinesP(edges, 1, np.pi/180, 20, np.array([]), 10)[0]
# draw
for c in circles[:3]:
# green for circles (only draw the 3 strongest)
cv2.circle(draw_im, (c[0],c[1]), c[2], (0,255,0), 2)
for (rho, theta) in lines[:5]:
# blue for infinite lines (only draw the 5 strongest)
x0 = np.cos(theta)*rho
y0 = np.sin(theta)*rho
pt1 = (int(x0 + (m+n)*(-np.sin(theta))), int(y0 + (m+n)*np.cos(theta)))
pt2 = (int(x0 - (m+n)*(-np.sin(theta))), int(y0 - (m+n)*np.cos(theta)))
cv2.line(draw_im, pt1, pt2, (255,0,0), 2)
for l in plines:
# red for line segments
cv2.line(draw_im, (l[0],l[1]), (l[2],l[3]), (0,0,255), 2)
cv2.imshow("circles",draw_im)
cv2.waitKey()
# save the resulting image
cv2.imwrite("res.jpg",draw_im)
當我在蟒蛇執行文件
File "houghlines.py", line 24, in <module>
lines = cv2.HoughLines(edges, 2, np.pi/90, 40)[0]
TypeError: 'NoneType' object has no attribute '__getitem__'
你們是否有什麼想法如何解決它?
在此先感謝。
'Houghlines'函數返回'None'。 – 2013-04-22 09:48:13
@segfolt:是的,但[文檔](http://docs.opencv.org/modules/imgproc/doc/feature_detection.html#houghlines)似乎並沒有表明這是正常的行爲.. – 2013-04-22 09:49:02
嗯 - 什麼如果你嘗試'cv2.HoughLines(邊緣,2,np.pi/90,40,無)',會發生? – 2013-04-22 09:54:58