0
グレースケール画像と同じサイズとハードエッジのブロブを持つ単純な画像です。以下のコードでこれらのサークルが見つからないのはなぜですか?OpenCV3円検出 - シンプルな円を見つける方法(明らかな解決法が見つからない)
ret,thresh1 = cv2.threshold(img,180,250,cv2.THRESH_BINARY)
thresh1 = cv2.blur(thresh1,(15,15))
circles = cv2.HoughCircles(thresh1,cv2.HOUGH_GRADIENT, 2, np.shape(thresh1)[0]/8, param1=200, param2=10)
if circles is not None:
plt.imshow(np.flipud(thresh1), origin='lower', cmap='bone')
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
currentAxis = plt.gca()
currentAxis.add_patch(Circle((i[0] , i[1]), i[2],fill=False,color='red'))
currentAxis.add_patch(Circle((i[0] , i[1]), 8,fill=True,color='green'))
plt.show()
私が得た出力はこれです:私はPARAM1およびPARAM2を微調整しようとした
。いずれにせよ私は誤検出(これ以上)または何もせずに終わるでしょうか?最小距離パラメータは、イメージの幅の1/8に任意の値としてのみ設定されます。
助けを借りると非常に役に立ちます。
私はあなたのプロットが逆さまかもしれないと思いますか?まだすべてのサークルを見つけることはできませんが、間違ったことを修正しようとするチューニングであまりにも多くの演奏をしたことがありますか? –
ありがとう - 良いスポット。私は明らかにドットとコードブラインドを消しました;-) – user3182080
はい、画像を反転し、原点を下に設定しました - そのラインを削除し、以下のパラメータを使用してください。フリップされたオプションと元のオプションは、このプロジェクトの今後の作業です。 'コード' 円= cv2.HoughCircles(THRESH1、cv2.HOUGH_GRADIENT、1.2、minDist = 10、PARAM1 = 200、PARAM2 = 50、minRadius = 0、maxRadius = 100) 'コード' うまく仕事をしていません。 – user3182080