前提・実現したいこと
Python、OpenCVを用いて丸い野菜の結球部の円検出をHough変換によって行いました。
まず現画像に対して先にCanny処理によってエッジ検出をしました。この際に、閾値などもいろいろ試しております。
その後、そのエッジ検出した画像に対し、Hough変換を行いました。
その際、背景などに土、影などのノイズが多いため、誤検出が多くなってしました。
そこで、実現したいことなのですが、この誤検出を色情報によってなくしたいです。
検出した円の内部の色の違いによって、描画する円の色を変える。もしくは、描画自体をしないという風にしたいです。
誤検出した部分は現画像と重ねて確認すると、検出したい野菜の結球部とは明らかに違う色なので。
発生している問題・エラーメッセージ
わからないこととしましては、円内部の色をどのように調べるのかいうのと、条件分岐をどこで行うのかということです。 そのプログラム自体がまったくわからないという状況です。
該当のソースコード
Python
1 2import cv2 3 4img = cv2.imread("c:/temp/ABC.jpg") 5 6# グレースケールに変換する。 7grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 8 9 10# ハフ変換で円検出する。 11circles = cv2.HoughCircles( 12 grey, cv2.HOUGH_GRADIENT, dp=1.0, minDist=20, param1=80, param2=28, minRadius=1,maxRadius=25 13) 14 15# 色情報を加える 16hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 17 18 19# 検出結果を描画する 20if circles is not None: 21 circles = circles.squeeze(axis=0) # (1, NumCircles, 3) -> (NumCircles, 3) 22 for cx, cy, r in circles: 23# ここのあたりで色による条件をいれる? 24 25 # 円の円周を描画する。 26 cv2.circle(img, (cx, cy), int(r), (0, 0, 255), 2) 27 # 円の中心を描画する。 28 cv2.circle(img, (cx, cy), 2, (0, 0, 255), 2) 29 30 31# 結果を保存する。 32cv2.imwrite("c:/temp/hough.jpg", img)
試したこと
円内部ではなく、画像全体に対して緑の部分(検出したいものの色)だけが残るようなことは試してみました。
補足情報(FW/ツールのバージョンなど)
OpenCV 4.2.0
Python 3.7
回答1件
あなたの回答
tips
プレビュー