PythonとOpenCVを使って画像内の円を検出する方法
OpenCVはPython向けにcv2ライブラリを提供しており、コンピュータビジョンにおけるさまざまな形状解析に活用できます。本記事では、OpenCVを使って画像の中から「円」を検出する方法を解説します。円の検出にはcv2.HoughCircles()関数を使用します。この関数は、ハフ変換(Hough Transform)を用いてグレースケール画像から円を検出するものです。
以下の例では、入力画像を読み込んだ後、そのコピーを作成し、ハフ変換を適用することで画像内の円を検出して出力します。
構文
cv2.HoughCircles(image, method, dp, minDist)
各引数の意味は次のとおりです。
- image:グレースケールに変換された画像ファイル
- method:円を検出するために使用するアルゴリズム(例:cv2.HOUGH_GRADIENT)
- dp:累積器(アキュムレータ)の解像度と画像解像度の逆比率
- minDist:検出された円の中心座標間の最小距離
サンプル画像
以下の例では、下記の画像を入力画像として使用し、プログラムを実行して円を検出します。

次のプログラムは、画像ファイル内に円が存在するかどうかを検出します。円が見つかった場合は、その位置を緑色の輪線で強調表示します。
コード例
import cv2
import numpy as np
image = cv2.imread('circle_ellipse_2.JPG')
output = image.copy()
img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 円を検出
circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1.3, 100)
# 円が見つかった場合
if circles is not None:
# 座標(x, y)と半径rを整数として取得
circles = np.round(circles[0, :]).astype("int")
print(circles)
# 検出した円を順に描画
for (x, y, r) in circles:
cv2.circle(output, (x, y), r, (0, 255, 0), 2)
# 結果画像を表示
cv2.imshow("circle", output)
cv2.waitKey(0)実行結果
上記のコードを実行すると、次のような出力が得られます。
[[93 98 84]]
この出力は、検出された円の中心座標が (x=93, y=98)、半径が 84ピクセル であることを示しています。実際に描画された結果画像は以下のとおりです。

このように、cv2.HoughCircles()を使えば、わずか数行のコードで画像内の円を正確に検出し、視覚的に強調表示することができます。パラメータ(dp や minDist など)を調整することで、検出感度や精度を目的の画像に合わせて最適化できる点もポイントです。
-
PythonとOpenCVで実現するテンプレートマッチングの基本とマルチスケール対応
テンプレートマッチングとは、実際の画像の中から、あらかじめ用意した小さな画像(テンプレート)と一致する部分を探し出す技術です。基本的にはパターンマッチングの一種であり、物体検出や顔認識など、さまざまなコンピュータビジョンのタスクの基礎となる手法です。PythonではOpenCVモジュールを使うことで、このマッチング処理を簡単に実装できます。本記事では、OpenCVのテンプレートマッチング機能を使った具体的な方法を解説します。OpenCVのインストールOpenCVの機能を利用するには、まずpipでライブラリをインストールします。sudo pip3 install opencv-python閾値(
-
Python・OpenCVでヒストグラム平坦化を実装する方法|cv2.equalizeHist()の使い方
ヒストグラム平坦化(Histogram Equalization)とは ヒストグラム平坦化は、画像処理において画像のヒストグラムを利用してコントラストを調整する手法です。 この手法は、多くの画像の全体的なコントラストを向上させる効果があります。特に、画像内の有効なデータが近いコントラスト値で表現されている場合に威力を発揮します。この調整を行うことで、輝度値がヒストグラム上により均等に分布するようになり、局所的にコントラストが低い領域でも高いコントラストを得られるようになります。 OpenCVの cv2.equalizeHist() 関数 OpenCVには、この処理を実行するための関数 cv2