使用 OpenCV/Python 无法更改网络摄像头的编解码器
Changing codec of webcam is not possible using OpenCV/Python
我正在使用 windows 10 和 python 3.7 / OpenCV4 和罗技 C922 网络摄像头。虽然使用 windows 相机应用程序似乎可以提供 30 fps,但使用 OpenCV 我无法获得超过 5-6 fps 的速度。分辨率设置为 FHD。
cam = cv2.VideoCapture(cv2.CAP_DSHOW+0)
while(1):
ret,frame = cam.read()
if cv2.waitKey(1) & 0xFF == ord('q'):
break
在另一个 post 中,我找到了将编解码器更改为 MJPG 的解决方案。但是,相机不接受更改编解码器。我试过了:
cam.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('m','j','p','g'))
cam.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M','J','P','G'))
cam.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*'MJPG'))
cam.set(cv2.CAP_PROP_FOURCC, float(cv2.VideoWriter_fourcc('m','j','p','g'))
cam.set(cv2.CAP_PROP_FOURCC, float(cv2.VideoWriter_fourcc('M','J','P','G'))
cam.set(cv2.CAP_PROP_FOURCC, 1196444237.0)
相机总是returns“844715353.0”
如何获得更高的帧率?
我使用 Logitech c920 网络摄像头,我在 imutils
模块中测试 WebcamVideoStream
class 并且该模块使用线程和队列数据结构来提高处理视频流时的 FPS OpenCV 是将 I/O(即从相机传感器读取帧)移动到单独的线程,您可以在此文件上设置自定义分辨率 webcamvideostream.py
.
您可以使用线程来获得更高的 FPS。也许这个解决方案可以帮到你。
请查看这些链接:
https://www.pyimagesearch.com/2015/12/21/increasing-webcam-fps-with-python-and-opencv/
https://www.pyimagesearch.com/2017/02/06/faster-video-file-fps-with-cv2-videocapture-and-opencv/
https://github.com/jrosebr1/imutils/blob/master/imutils/video/webcamvideostream.py
看来顺序很重要。据我了解,OpenCv 在后台使用 ffmpeg。在 ffmpeg 中,命令应该是这样的:
ffmpeg -f dshow -framerate 60 -video_size 1280x720 -input_format mjpeg -i video="my webcam" out.mkv
所以你的 OpenCV 代码应该是这样的
my_cam_index = 0
cap = cv2.VideoCapture(my_cam_index, cv2.CAP_DSHOW)
cap.set(cv2.CAP_PROP_FPS, 60.0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH,1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,720)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter.fourcc('M','J','P','G'))
我正在使用 windows 10 和 python 3.7 / OpenCV4 和罗技 C922 网络摄像头。虽然使用 windows 相机应用程序似乎可以提供 30 fps,但使用 OpenCV 我无法获得超过 5-6 fps 的速度。分辨率设置为 FHD。
cam = cv2.VideoCapture(cv2.CAP_DSHOW+0)
while(1):
ret,frame = cam.read()
if cv2.waitKey(1) & 0xFF == ord('q'):
break
在另一个 post 中,我找到了将编解码器更改为 MJPG 的解决方案。但是,相机不接受更改编解码器。我试过了:
cam.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('m','j','p','g'))
cam.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M','J','P','G'))
cam.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*'MJPG'))
cam.set(cv2.CAP_PROP_FOURCC, float(cv2.VideoWriter_fourcc('m','j','p','g'))
cam.set(cv2.CAP_PROP_FOURCC, float(cv2.VideoWriter_fourcc('M','J','P','G'))
cam.set(cv2.CAP_PROP_FOURCC, 1196444237.0)
相机总是returns“844715353.0”
如何获得更高的帧率?
我使用 Logitech c920 网络摄像头,我在 imutils
模块中测试 WebcamVideoStream
class 并且该模块使用线程和队列数据结构来提高处理视频流时的 FPS OpenCV 是将 I/O(即从相机传感器读取帧)移动到单独的线程,您可以在此文件上设置自定义分辨率 webcamvideostream.py
.
您可以使用线程来获得更高的 FPS。也许这个解决方案可以帮到你。
请查看这些链接:
https://www.pyimagesearch.com/2015/12/21/increasing-webcam-fps-with-python-and-opencv/
https://www.pyimagesearch.com/2017/02/06/faster-video-file-fps-with-cv2-videocapture-and-opencv/
https://github.com/jrosebr1/imutils/blob/master/imutils/video/webcamvideostream.py
看来顺序很重要。据我了解,OpenCv 在后台使用 ffmpeg。在 ffmpeg 中,命令应该是这样的:
ffmpeg -f dshow -framerate 60 -video_size 1280x720 -input_format mjpeg -i video="my webcam" out.mkv
所以你的 OpenCV 代码应该是这样的
my_cam_index = 0
cap = cv2.VideoCapture(my_cam_index, cv2.CAP_DSHOW)
cap.set(cv2.CAP_PROP_FPS, 60.0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH,1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,720)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter.fourcc('M','J','P','G'))