v4l2 、UVC 设置摄像头、获取摄像头性能
OpenCV 打开相机很简单,VideoCapture类可以解决大部分问题:
import cv2
#打开usbcamera
cap = cv2.VideoCapture(0)
#打开网络串流
cap = cv2.VideoCapture("rtsp://...")
#打开本地视频
cap = cv2.VideoCapture("video.avi")
实际上这是因为OpenCV的将底层视频库封装很完善,比如USB相机,在linux,打开一个USB camera大部分底层调用的是v4l2库,而v4l2库调用更加底层的uvc。
最近因为一个目标检测项目需要用到高清摄像头,而检测移动目标,在抓拍瞬间需要解决motion blur的问题。
运动模糊一般通过减少快门时间来解决。故需要设置相机参数。
由于担心OpenCV封装之后很多参数hard code了,所以直接用V4L2或UVC查看、设置摄像机的参数:
V4L2:
apt-get install v4l2-utils
v4l2-ctl --list-devices
v4l2-ctl -d /dev/video0 --list-ctrls
UVC:
apt-get install uvcdynctrl
uvcdynctrl -d video0 -c
参考:
https://www.kurokesu.com/main/2016/01/16/manual-usb-camera-settings-in-linux/
https://www.linuxquestions.org/questions/linux-software-2/camera-settings-in-linux-v4l2-or-uvc-drivers-4175525260/
https://docs.opencv.org/4.1.0/d0/da7/videoio_overview.html