ハフ変換に検知する線の太さを決める機能はないのでしょうか?
なかったと思います。やるのであれば、「太さ方向に細かい線を検出」して、「別のマスク画像に検出した短い太さ方向の線を描画」してマスク画像に太い線を抽出する、のような方法になると思います。
また、これらのやり方は目的を達成するのに適しているのでしょうか?
線といえばHough検出とセットで覚えていいと思います。非常に筋の良い方法です。
私の書いた下のやり方だとまだ丸いところも拾ってしまっていますが、すでに挑戦されたHough変換を以下の画像に対して使えば、狙い通り線を抽出できると思います。これで十分そうですね!
※丸を検出するHough検出もOpenCVに入っているので、私が書いたコードにちょっと付け足して「丸部分を検出して黒く塗りつぶす」、というやり方もできますね。そうしたら黒太線の領域だけになります。
※細かいところはコード中のURLを見てもらった方が分かりやすいと思います。
Python3Python3
1import cv2
2import numpy as np
3img = cv2.imread("./img.png")
4
5# 参考:色空間の変換
6# http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_colorspaces/py_colorspaces.html
7img_HSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
8img_bin = cv2.inRange(img,(0,0,0),(255,100,100))
9
10
11# 参考:モルフォロジー変換
12# http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_morphological_ops/py_morphological_ops.html
13kernel = np.ones((11,11),np.uint8)
14img_bin = cv2.morphologyEx(img_bin, cv2.MORPH_OPEN, kernel)
15cv2.imshow("img_bin",img_bin)
16cv2.waitKey(0)
17
18cv2.imwrite("img_bin.png",img_bin)
19
補足
黒太線の中心が必要であれば、Scikit-ImageのSkeletonizeをしたらよいですし、黒太線の輪郭であればblob検出でやっても、エッジ検出やラプラシアンフィルタを使っても良いと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。