OpenCVのcv2.HoughLinesP()
関数は、画像内の直線を検出するための強力なツールです。この記事では、その使い方と直線検出に必要な前処理について詳しく解説します。
cv2.HoughLinesP()関数の基本
cv2.HoughLinesP()
関数は、ハフ変換を用いて画像内の線分を検出するために利用されます。以下にその基本的な使用方法を示します。
import cv2
import numpy as np
# 画像の読み込み
img = cv2.imread("./sample.png")
# グレースケール化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# ビット反転
reversed_gray = cv2.bitwise_not(gray)
# 直線の検出
lines = cv2.HoughLinesP(reversed_gray, rho=1, theta=np.pi/360, threshold=80, minLineLength=400, maxLineGap=5)
# 検出した直線の描画
for line in lines:
x1, y1, x2, y2 = line[0]
img = cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 3)
# 画像の保存
cv2.imwrite("sample_after.png", img)
このコードは、画像から直線を検出し、それを赤色で描画します。
cv2.HoughLinesP()関数の引数について
cv2.HoughLinesP()
関数にはいくつかの重要な引数があります。
rho
:直角座標点と直線の距離。通常、1以上の値を指定します。theta
:直角座標点と直線の角度。threshold
:直線とみなすための閾値。この値以上の投票を得た直線だけが出力されます。minLineLength
:最小の線の長さ。これより短い線は無視されます。maxLineGap
:同一の線とみなす最大のギャップ。これより長いギャップを持つ線は別々の線として扱われます。
これらの引数を適切に設定することで、様々な種類の直線を検出することが可能になります。
まとめ
PythonとOpenCVを使用して画像から直線を検出する方法を解説しました。cv2.HoughLinesP()
関数は非常に強力で、適切に使用すれば高精度な直線検出が可能です。ただし、その前に適切な前処理が必要であることを忘れないでください。これからもPythonとOpenCVを活用して、さまざまな画像処理タスクに挑戦してみてください。.