OpenCVとPythonを使用した円検出の方法


  1. 画像の読み込みと前処理 まず、OpenCVを使用して画像を読み込みます。次に、必要な場合は画像を前処理することができます。一般的な前処理手法には、画像のグレースケール変換、ノイズの除去、および輪郭の抽出があります。

    import cv2
    # 画像の読み込み
    image = cv2.imread("image.jpg")
    # グレースケール変換
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # ノイズの除去
    blurred = cv2.GaussianBlur(gray, (5, 5), 0)
    # 輪郭の抽出
    edges = cv2.Canny(blurred, 50, 150)
  2. 円の検出 次に、Hough変換を使用して円を検出します。Hough変換は、画像中の直線や円などの形状を検出するための一般的な手法です。

    circles = cv2.HoughCircles(edges, cv2.HOUGH_GRADIENT, dp=1, minDist=100, param1=50, param2=30, minRadius=0, maxRadius=0)

    上記のコードでは、edgesは輪郭抽出された画像、dpは輪郭解像度の逆比、minDistは検出された円の中心間の最小距離、param1param2は検出の精度を調整するパラメータです。minRadiusmaxRadiusは検出する円の半径範囲を指定します。

  3. 検出された円の描画 最後に、検出された円を元の画像に描画します。

    if circles is not None:
       circles = np.round(circles[0, :]).astype("int")
       for (x, y, r) in circles:
           cv2.circle(image, (x, y), r, (0, 255, 0), 2)
    cv2.imshow("Detected Circles", image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

以上が、OpenCVとPythonを使用して円検出を行う基本的な手順です。これらのコード例を使用して、円検出についてのブログ投稿を執筆することができます。