今回は、画像処理ができるオープンソースライブラリのOpenCVのimreadを使って、画像や映像を読み込む方法ついて徹底解説します!
画像処理や映像処理をしたい方必見の内容です。
OpenCVとは?
OpenCVは、画像処理・画像解析および機械学習等の機能を持つオープンソースのライブラリです。
Pythonを始め、C/C++、Java、MATLAB用として公開されており、もともとはインテルが開発・公開しています。
OpenCVのインストール方法
OpenCVのimreadを使用するには、Pythonやライブラリのインストールが必要です。
インストール方法はこちら(画像編集用ライブラリ「OpenCV」のインストール方法)にまとめてありますので御覧ください。
OpenCVのimreadを使って画像を読み込む方法
それでは実際に、OpenCVのimreadを使用して画像を読み込んでみましょう。
OpenCVには様々なことができるメソッドが用意されていますが、その中でも基本中の基本、imreadについてご紹介します。
それでは順を追ってPythonコードを書いていきましょう!
[Create New Project]で新しいプロジェクトを作成します。Locationに「opencv」と入力し[Create]をクリックします。
Pycharmでは、プロジェクトという単位でプログラムを管理することができます。
プロジェクトは、指定したLocationのディレクトリに作られたフォルダです。
ダイアログボックスから「Python File」を選びます。
「Name」に「image.py」と入力し[OK]をクリックします。
使用するライブラリをインポートします。
OpenCVはcv2でインポートできます。
また、Matplotlibはグラフ描画ライブラリとして、インポートした画像を視覚化(ビジュアライズ)するときに使用されます。
import matplotlib.pyplot as plt
画像を読み込みます。
画像を読み込むにはimreadという関数を使用します。
このように、imreadとフォルダパスを書かずに読み込むと、pythonファイルと同階層のディレクトリにある画像が読み込まれます。
つまり、今回の場合は、「image.py」を保存したプロジェクトフォルダの中に、同じ名前のファイル名(image.jpg)として任意の画像ファイルを保存しておく必要があります。
読み込んだ画像をRGBに変換します。
OpenCVのimreadで読み込む画像データの色情報は、一般的なRGB形式ではなく、BGR形式で読み込まれます。
このまま表示させようとすると、色合いがおかしくなるため、COLOR_BGR2RGBで色を変換しています。
Pythonに関連するライブラリや関数では、「2」を「to」の意味で使用することが多くあります。
BGR2RGBは、「BGR to RGB」、つまり「BGRをRGBに」と言う意味で使われています。
顔認識した画像を表示させます。
plt.show()
画像が表示されます。
OpenCVのimreadの機能
imreadは、画像をインポートする際に、他にも引数を指定することができます。
imreadでは、インポートする際のカラータイプも指定することができます。
cv2.imread(“画像ファイル名”,画像のカラータイプ指定flags)
flags:
>0 画像は,強制的に3チャンネルカラー画像として読み込まれます
=0画像は,強制的にグレースケール画像として読み込まれます
<0画像は,そのままの画像として読み込まれます
例えば、imreadでグレースケールの画像として読み込んでみましょう。
flagsを0に設定するのと同時に、グレースケール(白黒表示)となるため、BGR2RGBはコメントアウトしておいてください。
import matplotlib.pyplot as pltimage = cv2.imread(“image.jpg”, flags=0)
# image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)plt.imshow(image)
plt.show()
このimreadのプログラムを実行すると、このような表示になるはずです。
変な色ですね。
これは実はmatplotlibの機能のせいでして、グレースケールの画像を無理やりカラーで表示しようとしているためです。
Matplotlibを使ってグレースケール画像をビジュアライズする際には、plt.gray()をつけておきましょう。
import matplotlib.pyplot as pltimage = cv2.imread(“image.jpg”, flags=0)
# image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)plt.imshow(image)
plt.gray()
plt.show()
これでグレースケールで表示されたはずです。
OpenCVで動画(映像)を読み込む方法
先程までは画像データを読み込んでいましたが、今度は動画データを読み込んでみましょう。
画像を読み込むのはimreadという関数でしたが、動画の場合はimreadではなくVideoCaptureという関数を使用します。
ダイアログボックスから「Python File」を選びます。
「Name」に「movie」と入力し[OK]をクリックします。
使用するライブラリをインポートします。
import matplotlib.pyplot as plt
動画を読み込みます。
動画を読み込むにはVideoCaptureという関数を使用します。
ここでも、「movie.py」を保存したプロジェクトフォルダの中に、同じ名前のファイル名(movie.mp4)として任意の動画ファイルを保存しておく必要があります。
読み込むフレームを最後まで読み、 読み切った際に処理が終了するようにwhileとif文を使用して読み込んでいます。
cap = cv2.VideoCapture(‘movie.mp4’)
while(cap.isOpened()):
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow(‘frame’,frame)
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
読み込んだ動画を表示させます。
cv2.destroyAllWindows()
動画が表示されます。
まとめ
いかがだったでしょうか。
今回は、imreadによる画像や動画の読み込みだけでしたが、この画像からネコの顔だけを認識したり、人間の顔だけを認識したりといったことや、モザイク処理や反転処理などの画像編集を行えるのがOpenCVのimreadの特徴です。
是非OpenCVをインストールして、画像のAI(人工知能)を作る一歩を踏み出してください!