OpenCVで動画表示; グレイスケール & 2値化映像を表示する
引き続きOpenCVの練習。
先週までに、画像を取得して変換・表示してみた。
・普通の画像 ・グレイスケール( Gray-Scale )に変換した画像 ・2値化( binary )した画像
3種類とも、表示できる。 そりゃそうだ。
画像オブジェクトに対して操作した結果を、別の画像オブジェクトに格納する。 わかりやすくて助かる。
今回は、画像ではなくwebカメラで動画表示。 カメラが捉えている映像を、画面上に表示する。
サンプルコードを見ると、なんと「画像を撮影する」を無限ループしている!
【 Python OpenCV 】カメラで撮影した動画を、リアルタイムで表示させる – Windows, Mac, Linux 対応 –|Zero-Cheese
そんなんでいいのか、、 当たり前と言えば当たり前か、、 「ぱらぱらマンガ」だもんな。
つまり、こんなコード。
while(cam.isOpened()): ret, frame = cam.read() cv2.imshow('cam', frame)
わかりやすいが、「こんなんでいいのか?」となる。 それは、カメラ、映像の扱いが直観的なレベルでわかっていない証拠。
まぁ、練習だ。数をこなそう。
当然、「普通の画像」による動画表示は成功したので、 実験としては、「組み合わせ」に挑戦。
・グレイスケールによる動画表示 ・バイナリ(2値化)による動画表示
もちろん成功するわけだが、このステップを踏むのが大事。 「Aができた」「Bができた」ならば、 「AしてBもできる?」と、 自分で考えて、試してみる(そして成功する)。
「成功するはず」「成功するに決まってる」くらいの内容が 精神的にちょうど良い。
負担が少なく、面白がって、余裕を持って取り組めるからだ。
学ぶには(=身につけるには = 変わっていくには)この「余裕」を作るのがコツ。
import cv2 cam = cv2.VideoCapture(1) # デスクトップPC & USBカメラは、(1)で使えた while(cam.isOpened()): # カメラが使える限り、ループ ret, frame = cam.read() # 画像を取得する frame_gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY) # グレイスケールに変換する ret, frame_binary = cv2.threshold(frame_gray, 177, 255, cv2.THRESH_BINARY) # 2値化する cv2.imshow('cam', frame_binary) # 画像を表示する; ループするから動画になる; ぱらぱらマンガ if cv2.waitKey(1) & 0xFF == ord('q'): # キー入力を16進数にして、'q'と等しければ( = 'q'と入力されたら)ループ終了 break cam.release() cv2.destroyAllWindows()
というわけで、とりあえず、長寿と繁栄を。