私は画像内の円を検出するためにPython用のOpenCVライブラリを使用しています。画像を表示し、その後、私は検出前の画像を表示すべき次のコードを、書いたOpenCVで重複する円を検出する
:缶の
下:テストケースとして、私は以下の画像を使用しています検出された円を追加しました:
import cv2
import numpy as np
image = cv2.imread('can.png')
image_rgb = image.copy()
image_copy = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
grayscaled_image = cv2.cvtColor(image_copy, cv2.COLOR_GRAY2BGR)
cv2.imshow("confirm", grayscaled_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
circles = cv2.HoughCircles(image_copy, cv2.HOUGH_GRADIENT, 1.3, 20, param1=60, param2=33, minRadius=10,maxRadius=28)
if circles is not None:
print("FOUND CIRCLES")
circles = np.round(circles[0, :]).astype("int")
print(circles)
for (x, y, r) in circles:
cv2.circle(image, (x, y), r, (255, 0, 0), 4)
cv2.rectangle(image, (x - 5, y - 5), (x + 5, y + 5), (0, 128, 255), -1)
cv2.imshow("Test", image + image_rgb)
cv2.waitKey(0)
cv2.destroyAllWindows()
が、私はこの取得:結果の画像を
私の問題はHoughCircles()
機能の使用にあると感じます。 minDist
は互いから一定の距離であることが検出された円を必要と0より大きい値である
cv2.HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]])
:それは使用があるのです。この要件では、各円の中心が同じ場所にあるので、缶の底にあるすべての円を適切に検出することは不可能です。等高線は解決策ですか?どのように輪郭を円に変換して、中心点の座標を使用することができますか?缶の底にある各リングのサークルオブジェクトを最もよく検出するにはどうすればよいですか?
ない問題の一部が、将来のために: 'image_copy = cv2.cvtColor(画像、cv2.COLOR_RGB2GRAY) '' image_copy = cv2.cvtColor(image、cv2.COLOR_BGR2GRAY) 'でなければなりません。 – Micka