前回、OpenCVを使って、USBカメラ1台の画像を表示するプログラムを作成しました。今回は、USBカメラ2台の画像を表示するプログラムを作っていこうと思います。
2台のカメラの画像を表示するプログラム
方法はいたってシンプル。
capture1.read()とcapture2.read()で2台のカメラの画像を取得、リサイズをした後にcv2.hconcatで横方向に画像を結合。最後にcv2.imshow()で画像を表示。
後は、これをwhileループで回しているだけです。
cv2.rotate()は、画像を上下反転しているだけです。上下反転は、使用するUSBカメラの土台と取得される画像の位置関係が問題なければ必要ないと思います。
import cv2
capture1 = cv2.VideoCapture(0)
capture2 = cv2.VideoCapture(1)
while(True):
# resize the frame
framesize = (960, 540)
ret1, frame1 = capture1.read()
frame1 = cv2.resize(frame1, framesize)
ret2, frame2 = capture2.read()
frame2 = cv2.resize(frame2, framesize)
img = cv2.hconcat([frame1, frame2])
img = cv2.rotate(img, cv2.ROTATE_180)
cv2.imshow('title', img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
capture1.release()
capture2.release()
早速、プログラムを実行。
本日もJetsonNanoとフクロウさんにご協力いただきました。
以下が、モニタに表示されている画像。無事に2台のUSBカメラから画像を取得し、横方向に結合できている。ちなみに、もし縦方向に結合したい場合は、cv2.vconcat()をお使いください。
2台のUSBカメラからの画像を取得し、リサイズ、結合、表示を行っていますが、JetsonNanoの処理はまだまだ余裕そうです。
素晴らしい。
ただし、前回の記事でも書いたように、やはり、起動時間が長い。。。
実際に車に積む場合は、常時スリープモードにしておいて、イグニッションオンで起動とか対策が必要そう。
そのあたりは、次回以降でやりたいと思います。
それでは。