見出し画像

Python初心者 無料で学習を極める(16)

こんにちわー。前回はopenCVを活用し、初めての画像特徴量の抽出をしましたね。本日は色々な特徴量抽出についてトライをしてみたいと思います!openCVのインストールや、構築に関してはこちらを参考にして下さい。

それでは、本日も宜しくお願い致します!

小技:jupyter notebook 上で画像表示

画像を触っていてふと、

フォルダをずっとウォッチしていないと結果がわからない

となんとも効率が悪い感じを感じました。
そこで、ちょっと調べてみると、

jupyter notebook上で表示ができる!

ことが分かりました!歓喜
※macでのやり方とwindowsで異なるみたいですが、私はwindowsをベースに実施している為、お許し下さい。
下記様にすることで、画像表示をすることができました~。これでjupyternotebook上で確認もできて、早く動作が出来そうです!
※original_photoフォルダにmononoke033.jpg を保存しています。

# 画像を読み込み
img = cv.imread('original_photo/mononoke033.jpg')
#画像のoepnCVで読み込んだRGB画像はBGRの順番であるため変換
img_kai = cv.cvtColor(img,cv.COLOR_BGR2RGB)
fig = plt.figure(1,(10,10))
plt.imshow(img_kai)

画像表示

特徴抽出2:閾値処理

画像処理に色々な種類がありすぎて、迷子になってきました。笑。
その為、閾値処理を用いた部分でどの様に表示されるかを確認してみましょう。まずは、簡単な閾値処理から。

#画像をグレーに変換
#読み込んだときの画像をグレーに変換
gray_t = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
#閾値処理を実施
#type:しきい値threshより大きい値がmaxvalに、それ以外の値が0に置き換えられる
# cv.threshold(img, thresh , maxval , type)
ret, thresh = cv.threshold(gray_t,80,255,cv.THRESH_BINARY)
fig = plt.figure(1,(10,10))
plt.imshow(thresh)
cv.imwrite('mod_photo/thresh_fig_mono033.jpg', thresh)

画像2

お!よく言われる 二値化 に画像ができた様に見えますね!
これで、肌感覚として輪郭が検出されそう感 を感じてきました。

特徴抽出3:輪郭検出

前段の画像をもちいて、輪郭が検出できるのか実施してみましょう!

#輪郭の検出
#輪郭の一覧情報:contours
#$輪郭の階層構造を表す情報:hierarchy
#入力画像:thresh
#輪郭情報の出力モード:RETR_EXTERNAL(一番外側の輪郭を出力)
#輪郭情報の出力条件:CHAIN_APPROX_SIMPLE(輪郭を出力するときに省略できる検出点は省略)
contours, hierarchy = cv.findContours(thresh , cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
#検出した輪郭に線を引く
img2 = cv.drawContours(img_kai, contours,-1,(0,0,255),2)
fig = plt.figure(1,(10,10))
plt.imshow(img2)

画像3

おぉぉぉぉぉぉ~~~~~

それっぽいですね。笑。
けど、見てわかる様に、線によっては検出が出来ていない部分もあります。
これはいわゆる

閾値設定がうまくできていない

ことになりますね。その為、2値化するときにどの値を閾値にするのかが
とても重要になることが理解できますね。

ちなみに、閾値を触る事でより顔の認識が出来そう感。はありました。が!やっぱり何を目的にするか大事ですね。今は、がむしゃらにトライです!笑

画像4

本日はここまで!また、色々な特徴抽出を進めていきます!それでは~

よろしければサポート頂けると幸いです!子供へのパパ時間提供の御礼(お菓子)に活用させて頂きます☆