0

このコードを再作成して円のハフ変換をプロットしようとしていますが、「円のハフ変換」行で 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
4

2 に答える 2

1

関数呼び出し:

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

returnNoneであるため、[0]アイテムのインデックスは失敗しました。画像が検出されなかったと思います。

于 2013-01-29T23:31:47.900 に答える
0

あなたの質問の2番目の部分に答える(あなたのコメントで...)

そのため、新しい画像を読み込もうとしましたが、次のエラーが発生しました。

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++ に変換します

于 2013-01-29T23:57:32.707 に答える