画像からエッジを検出する代表的な手法として、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を上げると、線のつながりがなくなってしまいました。