NoneType'对象不可下标索引错误用于HoughCircles

0 投票
2 回答
3069 浏览
提问于 2025-04-17 14:08

我正在尝试重现这段代码,以绘制圆的霍夫变换,但在“圆的霍夫变换”这一行出现了类型错误。请帮我理解一下我为什么会遇到这个错误。

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

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

我尝试加载一张新图片,但现在出现了这个错误:

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

你新输入的图片是彩色的,而你的代码却在期待灰度图(这是HoughCircles需要的)。

首先,你需要把它转换成灰度图,以便进行HoughCircles处理。假设原始图片是RGB格式:

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

这一行:

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

会创建一个彩色版本的灰度图,用来在找到圆圈后绘制圆圈。这样做只是为了在灰度图上显示带颜色的圆圈。如果你更喜欢直接在原始图片上绘制圆圈,其实这一步是可以省略的。

巧合的是,我今天早些时候也回答了一个关于C++版本的同样问题...
将图像颜色从灰度转换为RGB OpenCV C++

1

这个函数调用:

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

返回的是 None,所以 [0] 这个索引没有成功。我猜是没有检测到任何图片。

撰写回答