
こんにちは三谷です。
今回は、画像処理ができるオープンソースライブラリの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 cv2 import matplotlib.pyplot as plt
画像を読み込みます。画像を読み込むにはimreadという関数を使用します。
image=cv2.imread("image.jpg")
このようにimreadとフォルダパスを書かずに読み込むと、pythonファイルと同階層のディレクトリにある画像が読み込まれます。
つまり、今回の場合は、「image.py」を保存したプロジェクトフォルダの中に、同じ名前のファイル名(image.jpg)として任意の画像ファイルを保存しておく必要があります。
読み込んだ画像をRGBに変換します。
image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
OpenCVのimreadで読み込む画像データの色情報は、一般的なRGB形式ではなく、BGR形式で読み込まれます。このまま表示させようとすると、色合いがおかしくなるため、COLOR_BGR2RGBで色を変換しています。
Pythonに関連するライブラリや関数では、「2」を「to」の意味で使用することが多くあります。BGR2RGBは、「BGR to RGB」、つまり「BGRをRGBに」と言う意味で使われています。
顔認識した画像を表示させます。
plt.imshow(image) plt.show()[Run]-[Run]で「image.py」を選択し機械学習プログラムを実行します。
画像が表示されます。
OpenCVのimreadの機能
imreadは、画像をインポートする際に他にも引数を指定することができます。
imreadでは、インポートする際のカラータイプも指定することができます。
cv2.imread("画像ファイル名",画像のカラータイプ指定flags) flags: >0 画像は,強制的に3チャンネルカラー画像として読み込まれます =0画像は,強制的にグレースケール画像として読み込まれます <0画像は,そのままの画像として読み込まれます
例えば、imreadでグレースケールの画像として読み込んでみましょう。
flagsを0に設定するのと同時に、グレースケール(白黒表示)となるため、BGR2RGBはコメントアウトしておいてください。
import cv2 import matplotlib.pyplot as plt image = cv2.imread("image.jpg", flags=0) # image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) plt.imshow(image) plt.show()
このimreadのプログラムを実行すると、このような表示になるはずです。
変な色ですね。
これは実はmatplotlibの機能のせいでして、グレースケールの画像を無理やりカラーで表示しようとしているためです。Matplotlibを使ってグレースケール画像をビジュアライズする際には、plt.gray()をつけておきましょう。
import cv2 import matplotlib.pyplot as plt image = cv2.imread("image.jpg", flags=0) # image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) plt.imshow(image) plt.gray() plt.show()
これでグレースケールで表示されたはずです。
OpenCVで動画(映像)を読み込む方法
先程までは画像データを読み込んでいましたが、今度は動画データを読み込んでみましょう。
画像を読み込むのはimreadという関数でしたが、動画の場合はimreadではなくVideoCaptureという関数を使用します。
[File]-[New]で新しくファイルを作成します。
ダイアログボックスから「Python File」を選びます。
「Name」に「movie」と入力し[OK]をクリックします。
使用するライブラリをインポートします。
import cv2 import matplotlib.pyplot as plt
動画を読み込みます。動画を読み込むにはVideoCaptureという関数を使用します。
cap = cv2.VideoCapture('movie.mp4')
ここでも、「movie.py」を保存したプロジェクトフォルダの中に、同じ名前のファイル名(movie.mp4)として任意の動画ファイルを保存しておく必要があります。
動画の場合は、画像と違って1フレームごとに読み込みを行います。読み込むフレームを最後まで読み、 読み切った際に処理が終了するように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
読み込んだ動画を表示させます。
cap.release() cv2.destroyAllWindows()[Run]-[Run]で「movie.py」を選択し機械学習プログラムを実行します。
動画が表示されます。
まとめ
いかがだったでしょうか。
今回はimreadによる画像や動画の読み込みだけでしたが、この画像からネコの顔だけを認識したり、人間の顔だけを認識したりといったことや、モザイク処理や反転処理などの画像編集を行えるのがOpenCVのimreadの特徴です。
是非OpenCVをインストールして、画像のAI(人工知能)を作る一歩を踏み出してください!