在rk的板子上读取摄像头的时候总是提示如下错误:
[ WARN:0] global /home/firefly/Downloads/opencv-4.5.4/modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video0): can't open camera by index
[ WARN:0] global /home/firefly/Downloads/opencv-4.5.4/modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video0): can't open camera by index
代码片段如下:
VideoCapture cap(CAP_V4L2);
// 2.打开默认相机;
cap.open(7);
// 3.判断相机是否打开成功;
if (!cap.isOpened())
return -1;
插拔usb摄像头,输入如下命令,可以看到挂载到系统对应的设备号
输入: ls /dev/video* -l
1. 这个是权限问题,直接通过chmod修改摄像头的权限,如果摄像头挂载到系统的设备名是/dev/video7,输入如下命令后,问题得到解决。
chmod 777 /dev/video7
2.另外一个思路是修改/dev/video7的分组(这个方法我没有测试),步骤如下:
检查是否和video属于同一组id -a
如果在你的组的列表中你看不到摄像头,输入如下指令
sudo usermod -a -G video
对于Ubuntu users:(20.04)sudo usermod -a -G video $LOGNAME
注销然后重新登陆,在尝试。
参考:
c++ - undefined reference to `cv::VideoCapture::VideoCapture(int) - Stack Overflow