cv2无法设置fps,但我可以用;
更改fpsv4l2-ctl -d 1 --set-parm=60
和解决方案;
v4l2-ctl -d 1 --set-fmt-video=width=640,height=480
但是当我尝试时;
camcapture = cv2.VideoCapture(1)
_,f = camcapture.read()
cv2.imwrite(filename, f)
捕获是60fps但是分辨率是320x240。很明显,cv2.VideoCapture会改变分辨率。好的,所以它不关心v4l2-ctl写入的设置并覆盖它自己的设置。所以我试试;
camcapture.set(3,640)
camcapture.set(4,480)
图像是预期的640x480,但帧速率降低到30fps。这次它会覆盖fps值。虽然相机支持它,但我无法在640x480 @ 60fps下工作。
是否有任何想法阻止cv2.VideoCapture覆盖v4l2-ctl写入的设置?
答案 0 :(得分:0)
为什么不尝试明确要求所需的帧率:
camcapture.set(cv2.cv.CV_CAP_PROP_FPS,60)
或者如果您更喜欢整数混淆:
camcapture.set(5,60)
因此相机会(或许)告诉你类似的东西:
HIGHGUI ERROR: V4L: Property <unknown property string>(5) not supported by device
PS:虽然每cv2.cv.CV_CAP_PROP_FRAME_WIDTH
更改3,但可以帮助您阅读代码...
答案 1 :(得分:0)
OpenCV自动选择第一个可用的捕获后端(see here)。可能是它没有自动使用V4L2。
还要在构建时同时设置-D WITH_V4L=ON
和-D WITH_LIBV4L=ON
。
要设置要使用的像素格式,请设置捕获的CAP_PROP_FOURCC
属性:
capture = cv2.VideoCapture(self.cam_id, cv2.CAP_V4L2)
scapture.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))
width = 1920
height = 1080
capture.set(cv2.CAP_PROP_FRAME_WIDTH, width)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, height)