【问题标题】:'NoneType' object is not subscriptable error for HoughCircles'NoneType' 对象不是 HoughCircles 的可下标错误
【发布时间】:2013-01-13 16:19:31
【问题描述】:

我正在尝试重新创建此代码以绘制圆的霍夫变换,但在“圆的霍夫变换”行上出现 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

【问题讨论】:

    标签: python opencv nonetype


    【解决方案1】:

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

    所以,我尝试加载新图像,但现在出现此错误:

    draw_im = cv2.cvtColor(im, cv2.COLOR_GRAY2BGR)
    cv2.error: /Users/sumrania/packages/OpenCV-2.4.3/modules/imgproc/src/color.cpp:3355:
    错误:函数 cvtColor 中的 (-215) scn == 1 && (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++

    【讨论】:

    • 所以,我评论了 draw_im 并且在所有地方只使用了 gray_im,但是现在我的脚本运行时间太长了。它没有显示任何错误,我不得不手动退出。
    • @snazzili - 如果您将 gray_im 提供给您的 cv2.circles() 函数,您将遇到冲突,因为您还向其发送了 RGB 颜色规范 (0,255,0)。尝试在此处使用您的颜色输入图像。另外......你知道程序在这里停止:cv2.waitKey() 等待键盘输入。如果您仍然无法使其工作,请提出一个新问题来显示您当前的代码。
    • 是的,我知道 waitKey 功能。感谢您更深入地了解我的功能! :)
    【解决方案2】:

    函数调用:

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

    返回None,因此[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 && (dcn == 3 || dcn == 4) 在函数 cvtColor
    • @snazzili:那是告诉你改用 3 或 4 通道彩色图片;见cvtColor assertion failed ( OpenCV with C++ )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多