Python: OpenCVを使用してエッジを検出する

画像からエッジを検出する代表的な手法として、Cannyエッジ検出というものがあります。OpenCVを使用すると、簡単にCannyエッジ検出を行うことができます。

cv2.Canny(image, threshold1, threshold2)

Cannyエッジ検出では、画像データに加えて、2つの引数threshold1とthreshold2が必須です。この2つの値はエッジ検出の際に以下のように使用されます。

threshold2より大きい場合: エッジとして検出される
threshold1より大きくthreshold2より小さい場合: エッジと隣接している場合には、エッジとして検出される
threshold1より小さい場合: エッジとして検出されない

エッジ検出結果

元画像

threshold1=100, threshold2=100

import cv2

img = cv2.imread('img/img.jpg')
dst = cv2.Canny(img, 100, 100)
cv2.imwrite('img/img_canny.jpg', dst)

結果

少し線が多すぎる印象です。

threshold1=100, threshold2=300

import cv2

img = cv2.imread('img/img.jpg')
dst = cv2.Canny(img, 100, 300)
cv2.imwrite('img/img_canny.jpg', dst)

結果

いい感じにエッジが検出できました。

threshold1=100, threshold2=600

import cv2

img = cv2.imread('img/img.jpg')
dst = cv2.Canny(img, 100, 600)
cv2.imwrite('img/img_canny.jpg', dst)

結果

少し線が少ないでしょうか。

threshold1=600, threshold2=600

import cv2

img = cv2.imread('img/img.jpg')
dst = cv2.Canny(img, 600, 600)
cv2.imwrite('img/img_canny.jpg', dst)

結果

threshold1を上げると、線のつながりがなくなってしまいました。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です