【Udemy講座】OpenCVでの画像処理入門

OpenCVで画像処理入門

 

 

Udemy講座を見終わったので、記事にしたいと思います。

これからOpenCVで勉強しようと思っている方やUdemy講座を取ろうか迷っている方はぜひ参考にして見てください。

OpenCVの環境構築から勉強できる!

MacとWindowsそれぞれで環境構築から学習することができます。

その他にも、Anacondaのインストール方法も学びます。

授業形式は基本的にJupyter-notebookでノート形式の学習スタイルになります。

仮想環境を使用して、OpenCVを使用する方法については以前記事にしているので参考にしてみてください。

画像処理の基礎が学習できる

色空間とグレースケールの話やBGRの話など基本的な概念から学習できます。

画像処理については、ウィンドウの調整や画像のりサイズ、ヒストグラムの均一化など応用的な事柄まで学習します。

扱う画像については下記のサイトから取得しました。

FreePhotos.cc – 無料写真ストック、使用料不要の画像

import cv2
import os
import sys
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

opencvの画像
必要な画像をJupyter-notebookに取り込みます。

img = cv2.imread("/home/medi/Desktop/Udemy_Py/data/sample2.jpeg")
img2 = cv2.imread("/home/medi/Desktop/Udemy_Py/data/people2.jpeg")
img3 = cv2.imread("/home/medi/Desktop/Udemy_Py/data/sea.jpeg")
img4 = cv2.imread("/home/medi/Desktop/Udemy_Py/data/building.jpeg")

opencvの画像

第2引数に0を与えるとグレースケールとして読み込まれます。

img_g = cv2.imread("/home/medi/Desktop/Udemy_Py/data/sample2.jpeg",0)
img2_g= cv2.imread("/home/medi/Desktop/Udemy_Py/data/people2.jpeg",0)
img3_g = cv2.imread("/home/medi/Desktop/Udemy_Py/data/sea.jpeg",0)
img4_g = cv2.imread("/home/medi/Desktop/Udemy_Py/data/building.jpeg",0)

opencvの画像2

色の分布がどうなっているかヒストグラムで描写してみます。

color_list = ["blue","green","red"]
for i,j in enumerate(color_list):
hist = cv2.calcHist([img4],[i],None,[256],[0,256])
plt.plot(hist, color=j)

色の分布を表すヒストグラム

色の分布のヒストグラム

グレースケールの場合でも同じようにヒストグラムを描いてみます。

hist2 = cv2.calcHist([img4_g],[0],None,[256],[0,256])
plt.plot(hist2)

グレースケールでのヒストグラム

グレースケールのヒストグラム

ヒストグラムの均一化を行うこともできます。
OpenCVではequalizeHist()を使用します。

img4_eq = cv2.equalizeHist(img4_g)
hist_e = cv2.calcHist([img4_eq],[0],None,[256],[0,256])
plt.plot(hist_e)

ヒストグラムの均一化

ヒストグラムの均一化
ヒストグラムを均一化すると暗いトコロがより暗く表現され、明るいトコロがより明るく表現されます。

そのため明暗がハッキリするという特徴があります。

二番目の画像が均一化した画像で、たしかに明暗がよりハッキリしていると思います。

opencvの画像2

openCVの画像3

次は、「ガンマ変換」です。

ガンマ変換とは画像の明るさの変換方法で、Gannmaと呼ばれる理由は式にガンマというパラメーターがあるからです。

①ガンマが1より小さい:画像が暗くなる
②ガンマが1より大きい:画像が明るくなる
数式で書くとこうなります。

 y ={255(\frac{x}{255})^{1/r}}

ガンマが1.5と0.4の場合でガンマ変換を行ってみます。

gamma = 1.5
gamma_cvt = np.zeros((256,1), dtype=np.uint8)
for i in range(256):
gamma_cvt[i][0] = 255 * (float(i)/255) **(1.0/gamma)
img_gamma = cv2.LUT(img4,gamma_cvt)

ガンマ変換の画像

γ=1.5としたガンマ変換

ガンマ変換2

γ=0.4としたガンマ変換

ガンマ変換3

OpenCVで顔検出

OpenCVにはすでに顔検出をするものが用意されているので、パス指定するだけで顔検出を行うことができます。

HAAR_FILE = "/home/medi/anaconda3/pkgs/opencv3-3.2.0-np111py35_0/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml"
cascade = cv2.CascadeClassifier(HAAR_FILE)
face = cascade.detectMultiScale(img2)
for x,y,w,h in face :
cv2.rectangle(img2,(x,y),(x+w,y+h),(0,0,255),10)

Haar-Cascadeによる顔検出

haar-cascade
ところどころ変な場所が囲まれていますが、それなりの精度で顔検出ができています。

今回紹介した画像処理・画像解析の他に動画処理・動画処理のレクチャーもあります。
Udemyで授業を受けるかどうか迷っている方は、ぜひ参考にしてみてください。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください