画像の輪郭を抽出したい、ポイント座標のシーケンスとして表現する。Cannyの辺から1行の輪郭を抽出する
Canny
私はイメージのエッジのみを含むバイナリイメージを生成できます。次に、findContours
を使用して輪郭を抽出しようとしています。しかし、結果はOKではありません。
非常に薄い領域と見なされるように、私はしばしば2行を得ました。 輪郭線を単純化して、1本の線として描くことができます。または、正しい結果を直接生成する別の関数を使ってそれらを抽出することも、より良いでしょう。
私はOpenCVのドキュメントを見ましたが、何か役に立つものは見つけられませんでしたが、私は同じような問題の最初のものではないと思います。私が使用できる機能や方法はありますか?
def main():
img = cv2.imread("lena-mono.png", 0)
if img is None:
raise Exception("Error while loading the image")
canny_img = cv2.Canny(img, 80, 150)
contours, hierarchy = cv2.findContours(canny_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
contours_img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
scale = 10
contours_img = cv2.resize(contours_img, (0, 0), fx=scale, fy=scale)
for cnt in contours:
color = np.random.randint(0, 255, (3)).tolist()
cv2.drawContours(contours_img,[cnt*scale], 0, color, 1)
cv2.imwrite("canny.png", canny_img)
cv2.imwrite("contours.png", contours_img)
スケールファクタは、輪郭の二重線を強調するために使用されます。ここでは
は、私がこれまでに書いたPythonコードです。ここ は、画像へのリンクです:
Canny
いずれかによって製造間違っ結果を見ることができる10倍ズーム提案は大いに感謝されます。
あなたがHoughLines http://docs.opencv.org/modules/imgproc/doc/feature_detection.html#houghlinesを使用する必要があります – Khashayar
画像をぼかして騒音を減らす – baci
私はそれが騒音の問題だとは思わないイメージ。あなたがCannyで抽出されたエッジを見てもOKです。 HoughLinesでは画像の曲線を扱うことができませんでしたか? – Muffo