前提・実現したいこと
現在、Hough変換で円を検出し
検出した円の内部、全ての画素を調べ
色の条件
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) bin_img = cv2.inRange(hsv, (30, 40, 0), (90, 255, 255))
一つの円の7割以上が、条件を満たしているならば円を描画。
未満なら描画しないというプログラムを作成しました。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "E:\K\pg\test.py", line 58, in <module> if bin_img[j, i] == 0: IndexError: index 594 is out of bounds for axis 0 with size 594
該当のソースコード
Python
1hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 2bin_img = cv2.inRange(hsv, (30, 40, 0), (90, 255, 255)) 3count1 = 0 4count2 = 0 5 6# 検出結果を描画する。 7if circles is not None: 8 circles = circles.squeeze(axis=0) # (1, NumCircles, 3) -> (NumCircles, 3) 9 10 for cx, cy, r in circles.astype(int): 11 12 #iとjを、円の端から端の四角形の範囲に設定 13 for i, j in zip(range(cx-r, cx+r), range(cy-r, cy+r)): 14 a = (cx, cy) 15 b = (i, j) 16 17 #(i,j)と円の中心(cx,cy)との距離を計算 18 answer = distance.euclidean(a, b) 19 20 #その距離answerがr内の時、countする。 21 if answer <= r: 22 count1 += 1 23 24 #円の内部の色が条件を満たしているとき、countする。 25 if bin_img[j, i] == 0: 26 count2 += 1 27 continue 28 29 #円内部の3割が条件を満たしていないとき(円内部の7割が色の条件を満たしてるとき)であれば円を描画 30 if (count2 / count1) * 100 <= 30: 31 # 円の描画 32 # 円の円周を描画する。 33 cv2.circle(img, (cx, cy), r, (0, 255, 0), 2) 34
わからないこと
該当のソースコードをいじる前(前回の質問の時)までは、
if bin_img[j, i] == 0:
これによるエラーは起きていなかったので、なぜエラーが起きたのかわからないです。
別の部分のコードが何か間違っていますか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。