WebカメラをたくさんつないでOpenCVで一斉に映したら監視カメラっぽくなった

プログラミング

こんにちは。今回は、Webカメラをつないで画面に表示するプログラムを紹介します。

Webカメラから画像を取り込んでみる

WebカメラをOpenCVでつないでキャプチャーするプログラムを検索すると、次のようなプログラムが見つけられます。

import cv2

capture=cv2.VideoCapture(0)

while(True):
    key = cv2.waitKey(1) & 0xFF
    if key == ord(' '):
        break
    ret, frame = capture.read()
    cv2.imshow('frame',frame)

capture.release()
cv2.destroyAllWindows()

ここで3行目の’0’って、謎な存在だな~と思っていました。もしかして、カメラをいっぱいつなげば、0・1・…と増えていくのかな?という疑問が湧いてきました。ということで試してみることにします。

Webカメラをたくさんつないでみる

つないでみました。つないだWebカメラは、ロジクールC910が1台とロジクールC270が5台です。

これらのWebカメラに写っている画像を表示してみます。

複数のカメラの映像をOpenCVを使って一斉に表示してみる

import cv2

i = 0
flag = True
captures = []

while( flag ):
    capture = cv2.VideoCapture(i)
    ret, frame = capture.read()
    flag = ret
    if flag:
       i += 1
       captures.append( capture )

while(True):
    key = cv2.waitKey(1) & 0xFF
    if key == ord(' '):
        break

    for i, capture in enumerate( captures ):
        ret, frame = capture.read()
        cv2.imshow( 'frame' + str(i), frame )


capture.release()
cv2.destroyAllWindows()

案外短いプログラムとなりました。

7~13行目ではカメラの台数分キャプチャができるようにしています。カメラの台数以上になると、flagがFalseになってループを抜けます。

15~22行目で表示しています。とはいえ16~18行目は、スペースキーを押したところで終了するための命令になっています。実質は20~22行目だけです。

その表示結果は・・・

プログラムの実行結果は次のようになりました。

「おい、○ッキーの指。お前はもうすでに包囲されている!」なんだかモニタリングルームみたいになりました。

ちなみに、それぞれのウインドウの位置合わせは手作業でやっています。

今回はこれでおしまいにします。それではまた。

Posted by 春日井 優