ITいろいろ

プログラミングやクラウド、データ解析など、ITにかかわることをいろいろと書いています。

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)

あまりエッジ検出、という感じの結果にはなりませんでした。 もう少し引数を変えるとうまくいくのかもしれません。 分かり次第またアップデートします。