- グレースケールで上記の画像を読み込む。
- 31x31のカーネルサイズのガウシアンフィルタをかける
- ガウシアンフィルタをかけた画像から元画像を引く
- しきい値 18 の処理をかける
- 確率的ハフ変換を行う
- 直線を描画する
# %% import cv2 import numpy as np img = cv2.imread("sample.png", cv2.IMREAD_GRAYSCALE) dst = cv2.GaussianBlur(img, ksize=(31, 31), sigmaX=0) sub = cv2.subtract(dst, img) ret, thr = cv2.threshold(sub, thresh=18, maxval=1, type=cv2.THRESH_BINARY) thr100 = thr*100 lines = cv2.HoughLinesP(thr, rho=1, theta=np.pi/180*2, threshold=30, minLineLength=20, maxLineGap=5) for line in lines: for x1, y1, x2, y2 in line: cv2.line(thr100, (x1, y1), (x2, y2), 255, 1) cv2.imwrite("result.png", thr100) cv2.imshow("Window", thr100) cv2.waitKey(0)
cv2.HoughLinesP
の引数は、threshold以降はデフォルト値をもつ引数になっている。
# 定義式 HoughLinesP(image, rho, theta, threshold, lines=None, minLineLength=None, maxLineGap=None)
threshold
の直後はデフォルト値が設定された lines
引数で、キーワード指定をせずに以下のように記述すると、 minLineLength
が5になってしまう。
# 間違い lines = cv2.HoughLinesP(thr, 1, np.pi/180*2, 30, 20, 5)