OpenCVのエッジ検出の方法をいくつか紹介
今回はエッジ検出です。Pillowもエッジ検出の方法はあるようですが、いったんOpenCVを使った方法をまとめたいと思います。
エッジ検出の方法
今回は3つ紹介します。
- Soble(ソーベル)法
- Laplacian(ラプラシアン)法
- Canny(キャニー)法
詳しいことはまだ無知なため割愛。。 使ってみてのおすすめはCanny(キャニー)法です。
Cannyを使ったエッジ検出
コード紹介
# インポート import cv2 # 画像ファイルの読み込み img = cv2.imread("Lenna.jpg") # Cannyを使ったエッジ検出 img_canny = cv2.Canny(img, 100, 100) # 読み込んだ画像の出力。 cv2.imshow('Lenna_canny', img_canny) # 何かのキーを入力待ちする。64bitのマシンの場合は「& 0xFF」が必要らしい cv2.waitKey(0) & 0xFF # ウィンドウを閉じる cv2.destroyAllWindows()
出力結果
少し解説
cv2.Cannyという関数を使います、第一引数には変換したい画像、第二引数と第三引数には閾値を入れます。 ここも詳細は分からないのですが、とりあえず両方100にしています。
その他のエッジ検出
ラプラシアン
# Laplacianを使ったエッジ検出 img_laplacian = cv2.Laplacian(img, cv2.CV_32F, 3)
ソーベル
# Sobelを使ったエッジ検出 img_sobel = cv2.Sobel(img, cv2.CV_32F, 1, 1, 3)
あまりエッジ検出、という感じの結果にはなりませんでした。 もう少し引数を変えるとうまくいくのかもしれません。 分かり次第またアップデートします。