webカメラをつかって動画をとりたい
pythonとopencvをつかったら取れる!と思ったので
適当なwebカメラかってつないでみたんだけど
カメラのスペック以下のサイズでしかimshowで表示されてない気がする。
確認
webcamtest.py
# -*- coding: utf-8 -*-
import cv2
camera = cv2.VideoCapture(0)
# 希望のセッティングにしてみる
camera.set(cv2.CAP_PROP_FPS,30);
camera.set(cv2.CAP_PROP_FRAME_WIDTH,1280);
camera.set(cv2.CAP_PROP_FRAME_HEIGHT,720);
while True:
ret, frame = camera.read() # フレームを取得
cv2.imshow('camera', frame) # フレームを画面に表示
# キー操作で抜ける
if cv2.waitKey(1) & 0xFF == ord('q'):
break
camera.release()
cv2.destroyAllWindows()
結果
とりあえずこれで表示はされるんだけど、
両端切れてるし、画像も粗い。多分640x480ぐらいじゃないかな
でもファイルのプロパティとしては1280x720になってる…
Windows標準ではどうかな
ドライバが悪いのかな?とか、USBのポートが悪いのかな?とか考えて、
Windows10標準のカメラアプリで確認してみることにした。
これで希望のサイズになっていれば、悪いのはこっちのプログラムってこと。
結果
きちんとでた。こっちのプログラムの問題だな。
対策
DirectShowを使うモードでカメラを有効化する。
webcamtest.py
camera = cv2.VideoCapture(0+cv2.CAP_DSHOW) #ここを変更
おまけ
カメラの設定ダイアログを開く方法。
DirectShowモードになっているときに、↓のコードを実行するとダイアログが開く
cv2.set(cv2.CAP_PROP_SETTINGS,0)