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行目だけです。
その表示結果は・・・
プログラムの実行結果は次のようになりました。
「おい、○ッキーの指。お前はもうすでに包囲されている!」なんだかモニタリングルームみたいになりました。
ちなみに、それぞれのウインドウの位置合わせは手作業でやっています。
今回はこれでおしまいにします。それではまた。
ディスカッション
コメント一覧
こんにちは、西本と申します。
windows10でUSBカメラを複数つないで表示・録画したいと思っていたところ、ここにたどり着きました。
カメラはノートPCのインカメラ、logicool、SAANWA SUPPLYのUSBカメラです。
コードを実行すると、ノートPCのインカメラが0番として認識し表示されるのですが、後の二つが出てきません。
何が違って表示できないのかわかりませんので教えていただけませんでしょうか?
こちらの環境はWindows10、メモリ8GB、Pythoon3.9です。
以上よろしくお願いします。
コメントに気が付くのが遅くなり申し訳ありません。
カメラの接続状況等がわからないので、回答できそうにありません。
ただ、インカメラが0番ということがわかった上で質問をされているので、カメラ1台分の映像を表示することはできると考えて回答します。
同時に複数の映像を表示しようとしないで、カメラの映像を1台ずつ表示できるかどうか試していただくのがよいと思います。
適切な回答ではないことは承知しておりますが、いただいた内容では精一杯の回答になります。ご容赦いただければ幸いです。