我正在尝试重新创建此代码以绘制圆的霍夫变换,但我在"圆的霍夫变换"行上收到一个 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
函数调用:
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 中
新输入图像是彩色的,你的代码需要灰度(这正是HoughCircles所需要的)。
首先,您需要将其转换为灰色以进行HoughCircles过程。假设原始文件是 RGB:
gray_im = cv2.cvtColor(im, cv2.COLOR_RGB2GRAY)
这一行:
draw_im = cv2.cvtColor(im, cv2.COLOR_GRAY2BGR)
创建灰度图像的彩色版本,以便在gray_im中找到圆圈后将其绘制到上面。这只是为了获得带有彩色圆圈的灰度结果。如果您宁愿在原始图像上绘制圆圈,则实际上并不需要它。
巧合的是,我今天早些时候回答了关于C++版本的相同问题......
将图像颜色从灰度转换为RGB OpenCV C++