【OpenCV】cvtColor関数でグレー化した画像の保存・表示
cvtColor関数とは取得した画像の色空間(表現できる色の範囲)を変換するための関数です。1ピクセルあたりRとGとBの3つの輝度値の情報を持つカラー画像を画像処理するより、1ピクセル当たり1つの輝度値の情報のみを持つモノクロ画像にして画像処理をすればいい場合などに、cvtColor関数でカラー→モノクロに変換したりします。
このプログラムはカラーカメラで取得した画像をOpenCVライブラリcvtColorでモノクロ画像に変換し、1秒ごとに表示し、jpg形式で保存する、という処理を行っています。モノクロ画像は処理の効率化と情報量の削減のために使用されることが多いです(【OpenCV】cvtColor関数でグレー化した画像の保存・表示でも使用)。
なお、このサンプルプログラムはTheImagingSource社製のモジュールを使用せず、OpenCVのオープンソースのライブラリのみを用いたPythonのコーディングとなります。
検証のための準備
実行結果
プログラム解説
OpenCVモジュールをインポートします。
import cv2
OpenCVライブラリを使ってVideoCaptureオブジェクトを取得します。
USBカメラを読み込む場合はVideoCaptureの引数にカメラの番号を指定します(PCに内蔵カメラが搭載されている場合、内蔵カメラに0が割り振られるのでUSBカメラは1以降の番号になります)。
capture = cv2.VideoCapture(1)
OpenCVでカメラの画像を取得する手順は、リアルタイム画像の読み込みと表示を繰り返すという処理の流れが一般的です。
サンプルではwhile文のループ中に下記の手順で画像の取得し画像処理を行っています。
① capture.readで画像の読み取り
② cvtColor関数を使いカメラから取得した画像のBGR色空間(カラーで表現できる色の範囲)をGRAY色空間(モノクロで表現できる色の範囲)に変換
(第1引数:①で取得した画像,第2引数:変換する画像フォーマット)
変換する画像フォーマットの一覧は下記を参照。
https://docs.opencv.org/3.4.0/d7/d1b/group__imgproc__misc.html#ga4e0972be5de079fed4e3a10e24ef5ef0
③ imshowで表示
(第1引数:ウィンドウ名,第2引数:①で取得した表示したい画像)
④ datetime.datetime.nowで現在の時刻を取得
⑤ cv2.imwrite() 関数を使って保存
(第1引数は画像のファイル名(④で取得した名称を使用),第2引数:①で取得した画像)
⑥ 1000ms(1秒)ごとに撮影するためにcv2.waitKey(1000)を指定
try:
while(True):
# ①画像の読み取り
ret,frame=capture.read()
# ②モノクロ化
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
#③ウィンドウ表示
cv2.imshow("frame_gray",gray)
#④現在の時刻を取得 日付と時刻を表す文字列を含んだファイル名のファイルを作成
date0=datetime.datetime.now()
date_str_form=date0.strftime("%Y%m%d_%H%M%S_%f")
#⑤jpeg画像保存
cv2.imwrite(date_str_form+".jpg",gray)
#⑥1秒間待つ
cv2.waitKey(1000)