はじめに
今回は以前の記事でC++を使って実装したエッジ検出プログラムをPythonで実装してみました。プログラムの構成についてはほとんど同一です。
実行環境については次の通りです。
- OS:macOS Catalina(ver 10.15.1)
- Python:ver 3.7.4
- OpenCV:opencv-python(ver 4.1.2.30)
ソースコード
import cv2 #グレースケールで読み込み gray_img = cv2.imread("test.jpg", 0) #エッジ検出 sobel_img = cv2.Sobel(gray_img, cv2.CV_32F, 1, 1, 1, 5) #sobel laplacian_img = cv2.Laplacian(gray_img, cv2.CV_32F, 1, 5) #laplacian canny_img = cv2.Canny(gray_img, 50, 150) #canny #書き込み cv2.imwrite("sobel.jpg", sobel_img) cv2.imwrite("laplacian.jpg", laplacian_img) cv2.imwrite("canny.jpg", canny_img)
簡単なプログラムの説明
C++とほぼ同一ですが、簡単な説明だけしておきます。
import cv2
opencv-pythonをインポートします。
cv2.imread()
画像ファイルを読み込みます。次のようにして利用します。
cv2.imread(ファイルパス,読み込みモード)
読み込みモードは「0」でグレースケール画像、「1」でカラー画像として読み込みます。
cv2.Sobel()
画像に対してSobel法を適応します。次のようにして利用します。
cv2.Sobel(入力画像,ビット深度,xの微分次数,yの微分次数,カーネルのサイズ,結果に加える値)
カーネルのサイズ及び結果に加える値について、特に指定がない場合には書かなくても大丈夫です。
cv2.Laplacian()
画像に対してLaplacian法を適応します。次のようにして利用します。
cv2.Laplacian(入力画像,ビット深度,アパーチャサイズ,結果に加える値)
アパーチャサイズ及び結果に加える値について、特に指定がない場合には書かなくても大丈夫です。
cv2.Canny()
画像に対してCanny法を適応します。次のようにして利用します。
cv2.Canny(入力画像,閾値1,閾値2,アパーチャサイズ)
アパーチャサイズについて、特に指定がない場合には書かなくても大丈夫です。
cv2.imwrite()
指定したファイルに画像を書き込みます。次のようにして利用します。
cv2.imwrite(ファイル名, 画像データ)
実行結果
このプログラムに適当な画像を入力画像として実行すると次のようになりました。
最後に
C++で書くよりもコードは簡潔になりますね。型の指定が必要ないところが素晴らしいです。
コメント