機械学習で作ったモデルにカメラから取得した画像を入れる時に疑問に思って、調べたが、頭に入りきらないので、ここに記述しておこうと思う。
OpenCVとは
Open Source Computer Vision Libraryのことで、画像解析や機械学習などの機能を持つライブラリ。
よく見るのは、デバイスのカメラを使用して画像を取得している場面。
ライブラリのコードはここにある。
インストール
基本的にはMacでの説明とする。pipが使用できる場合は下記
pip install opencv-python
でインストールし、使用するスクリプトの最初にimportすれば良い。
カメラから画像を取得する
順番的には画像を読み込ませて表示のはずだが、カメラ使えたほうがやりがいあるよねってことでカメラから。
コード
以下のスクリプトで実行すればカメラが起動し、画像を連続で取得・表示する。止めたい時は画像が表示されているウィンドウをクリックしてキーボードの”q”を押せば閉じる。
# opencvライブラリをimport
import cv2
# カメラを起動させる
cap = cv2.VideoCapture(0)
while True:
ret, img = cap.read()
cv2.imshow('Video', img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
コード詳細
- while True:となっているのは、動画の構成を考えるとわかる。画像の連続が絶え間なく続けられている状態(=while True)。
- cap = cv2.VideoCapture(0)でカメラを起動させており、cap変数に格納。ちなみにcaptureを意味している、よく使われる
- cap.read()の戻り値としてretとimgがある。
- retは戻り値を意味し、画像が取れている場合はTrue, 取れていない場合はFalseを返す
- imgには取得した画像が返される。
- img(画像)の実体はnumpy.ndarrayで(height, width, RGB)の順番である。
- cv2.imshowの第一引数がウィンドウで表示させる名前、基本的にstringであればなんでも良い、第二引数は表示させる対象を入れる。ここではcap.read()の戻り値であるカメラから取得した画像(img)を入れて、表示。
- cap.release()でカメラから取得した際に使用したメモリを開放している、絶対必要。
- cv2.destroyAllWindows()でウィンドウを削除
コメント