問題点
import cv2 w = 1280 h = 720 cap=cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, w) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, h)
基本的にはこれで大丈夫と思いますがカメラによってはうまくいかない時もあります。
解決方法
まずは使っているカメラがどの解像度をサポートしているかを知る必要があります。sudo apt install v4l-utils sudo chmod 777 /dev/video* v4l2-ctl -d /dev/video0 --list-formats-ext
このような結果が返ってきます。
ioctl: VIDIOC_ENUM_FMT Type: Video Capture [0]: 'MJPG' (Motion-JPEG, compressed) Size: Discrete 1280x720 Interval: Discrete 0.033s (30.000 fps) Size: Discrete 640x480 Interval: Discrete 0.033s (30.000 fps) Size: Discrete 640x360 Interval: Discrete 0.033s (30.000 fps) Size: Discrete 352x288 Interval: Discrete 0.033s (30.000 fps) Size: Discrete 320x240 Interval: Discrete 0.033s (30.000 fps) Size: Discrete 176x144 Interval: Discrete 0.033s (30.000 fps) [1]: 'YUYV' (YUYV 4:2:2) Size: Discrete 640x480 Interval: Discrete 0.033s (30.000 fps) Size: Discrete 640x360 Interval: Discrete 0.033s (30.000 fps) Size: Discrete 352x288 Interval: Discrete 0.033s (30.000 fps) Size: Discrete 320x240 Interval: Discrete 0.033s (30.000 fps) Size: Discrete 176x144 Interval: Discrete 0.033s (30.000 fps)
「MJPG」と「YUYV」が関係しているらしいです。
このようにするとうまくいきました。
import cv2 w=1280 h=720 cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')) cap.set(cv2.CAP_PROP_FRAME_WIDTH, w) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, h)
関連記事
WSL2でカメラを使うには - パソコン関連もろもろWSL2でカメラを使うには(2) - パソコン関連もろもろ
【更新記事】WSL2でカメラを使うには(3) - パソコン関連もろもろ