'NoneType'对象不是HoughCircles的可订阅错误

时间:2013-01-29 23:29:48

标签: python opencv nonetype

我正在尝试重新创建此代码以绘制圆的hough变换,但我在“Hough Transform for circles”行上得到了TypeError。请帮助我理解为什么我可能会收到这个错误。

def fit_circle_houghtransform(vec_x, vec_y):
"""
    use hough transform to fit circle:
    http://www.janeriksolem.net/2012/08/reading-gauges-detecting-lines-and.html
    """

#load image
im = cv2.imread("gauge1.jpg")

#create a version to draw on and blurred version
draw_im = cv2.cvtColor(im, cv2.COLOR_GRAY2BGR)

m,n = im.shape

#Hough transform for circles
circles = cv2.HoughCircles(im, cv2.cv.CV_HOUGH_GRADIENT, 2, 10, np.array([]), 20, 60, m/10)[0]
c = circles[0]

cv2.circle(draw_im, (c[0],c[1]), c[2], (0,255,0), 2)
cv2.imshow("circles", im)
cv2.waitKey()

#save imgae
cv2.imwrite("ell.jpg", draw_im)

确切的错误是:

File "fit_circle_houghtransform.py", line 43, in fit_circle_houghtransform
circles = cv2.HoughCircles(im, cv2.cv.CV_HOUGH_GRADIENT, 2, 10, np.array([]), 20, 60, m/10)[0]
TypeError: 'NoneType' object is not subscriptable

2 个答案:

答案 0 :(得分:1)

函数调用:

cv2.HoughCircles(im, cv2.cv.CV_HOUGH_GRADIENT, 2, 10, np.array([]), 20, 60, m/10)

返回None,因此[0]项目索引失败。我想没有检测到的图像。

答案 1 :(得分:0)

回答问题的第二部分(在你的评论中......)

  
    

所以,我试图加载一个新图像,但现在我收到了这个错误:

         

draw_im = cv2.cvtColor(im,cv2.COLOR_GRAY2BGR)
        cv2.error:/Users/sumrania/packages/OpenCV-2.4.3/modules/imgproc/src/color.cpp:3355:
        错误:(-215)scn == 1&&函数cvtColor中的(dcn == 3 || dcn == 4)

  

您的新输入图像是彩色的,您的代码期望灰度(这是HoughCircles需要的)。

首先,您需要将其转换为HoughCircles流程的灰色。假设原件是RGB:

  gray_im = cv2.cvtColor(im, cv2.COLOR_RGB2GRAY)

这一行:

  draw_im = cv2.cvtColor(im, cv2.COLOR_GRAY2BGR)

创建灰度图像的彩色版本,用于在中找到之后将它们绘制到gray_im中。这只是为了获得带有彩色圆圈的灰度结果。如果您想将圆圈绘制到原始图像上,则不需要它。

巧合的是,我今天早些时候就C ++版本回答了同样的问题...... Convert Image Color from Grayscale to RGB OpenCV C++