
まくまく
プラグラミング言語「PYTHON」を使ってみよう!!業務自動化・効率化の実例を踏まえ、解説できればと思っています。対象は、プログラムを学び始めた初心者向けとなります。今回はopenCVを使用して物体のエッジ(輪郭)を検出してみようと思います。
使用するのはopenCV
使用するのは、画像処理ライブラリのopenCVです。ここではopenCVがインストールされているのを前提として書き進めていきます。
サンプルコード
import cv2
img = cv2.imread('osaka.jpeg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 100)
cv2.imwrite('osaka_NR.jpg', edges)
コメント
- 1行目 OpenCVをインポート
- 2行目「img = imread〜」jpegファイル読み込み
- 3行目「gray = 〜」写真をグレースケールにする
- 4行目「cannyフィルタ」でエッジ検出をする
- 5行目「cv2.imwrite〜」エッジ検出したファイルを保存
画像はグレースケールにする必要があるため、3行目でグレー処理をしています。(写真読み込み時にグレースケール読み込みをする方法でも問題ありません。)
OpenCVでの代表的なエッジ検出方法は3つあります。
・ Sobelフィルター
・ ラプラシアンフィルター
・ Canny法
解析するための画像微分の方法などが異なっているようですが、特に拘りがなければCanny法がいちばんいい感じに仕上げてくれると思います。
元画像によっては、4行目にある「edges = cv2.Canny(gray, 50, 100)」←赤字の数値(エッジを判定する閾値)を調整する必要があります。
エッジ検出①:ビルが建ち並ぶ都会の風景
ビルが建ち並ぶ都会の風景をエッジ検出してみました。
それぞれのビルの輪郭を検出できていますが、ちょっと全体的にごちゃごちゃとしてて荒い印象もありますね。
エッジ検出②:単純な建物
直線がメインの単純な建物で検出してみましょう。
これくらいであれば良い感じに検出できそうです。
エッジ検出③:イラスト
イラストでも試してみましょう。
いちばんきれいに輪郭が検出できましたね。やはりはっきりした線だとやりやすいです。