本文主要讲述了利用rv1126连接usb摄像头来完成图像抓取测试的全过程,汇总了期间出现的一系列的问题。
准备工作:
opencv的交叉编译,参考:RV1126(瑞芯微)交叉编译Opencv步骤与相关问题汇总_瑞芯微 交叉编译工具-优快云博客
一、上板运行方法
将代码传至开发板的方法有多种:
①adb
②挂载(nfs)
③远程登陆
不管使用哪种,只要能把此文件夹传至开发板端即可。但要注意的是要为可执行文件赋予权限
chmod 777 test //给予可执行权限
./test //运行代码
二、上板测试过程
1、首先利用filezilla软件将linux中所需opencv的arm版本文件以及test相关文件传输至板子中。注意:filezilla与mobaxterm和共享文件相比,文件传输更快且可以传输文件种类更多。后面的上板测试操作无需test文件,只需要将opencv的arm版本上传至板子的lib下即可:
2、在板子命令行中,输入以下指令:
//抓取图像到/tmp/bypass0.raw ./中
v4l2-ctl -d /dev/video45 \
--set-fmt-video=width=3840,height=2160,\
pixelformat=NV12 \
--stream-mmap=3 \
--stream-skip=30 \
--stream-to=/tmp/bypass0.raw \
--stream-count=1 \
--stream-poll
3、此时,出现错误:[root@RV1126_RV1109:~/opencv_arm]# ./test [ WARN:0] global /home/alang/opencv/modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video25): can't open camera by index Error: Failed to open camera [root@RV1126_RV1109:~/opencv_arm]# chmod 777 /dev/video25,需要对其进行修改,参考:EB-RV1126-DC201开发板实现USB摄像头抓图 - 阿风小子 - 博客园 (cnblogs.com)
打开linux中rv1126的内核文件,修改目录下的 ./kernel/arch/arm/configs/rv1126_defconfig文件,在其中填写如下代码:
CONFIG_MEDIA_USB_SUPPORT=y
CONFIG_USB_VIDEO_CLASS=y
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
CONFIG_USB_GSPCA=m
4、回到sdk根目录下进行编译,即kernel的上一级,内核编译参考:
【RK1126】SDK编译_rv1126的sdk编译-优快云博客
输入以下指令:
./build.sh kernel //生成boot.img
./build.sh updateimg //生成生成烧录文件updateimg
//烧录文件都在根目录sdk的rockdev中
5、将新的updateimg传入win中,并利用软件进行固件烧录。(之前的文件需重新传入)
6、之后在mobaxterm中进入rv1126的系统,输入以下指令,查看设备目录。
v4l2-ctl --list-devices
7、输入抓取图像命令行后发现仍有故障:
参考:
修改相关指令:
ls /dev/video* //查看rv1126的设备
v4l2-ctl -list-devices //确定usb的vedio,本机是45
chmod 777 /dev/vedio45
dmesg //查看usb摄像头能否正常连接
//抓取图像到/tmp/bypass0.raw ./中
v4l2-ctl -d /dev/video45 \
--set-fmt-video=width=3840,height=2160,\
pixelformat=NV12 \
--stream-mmap=3 \
--stream-skip=30 \
--stream-to=/tmp/bypass0.raw \
--stream-count=1 \
--stream-poll
三、存在问题
在opencv交叉编译的过程中未勾选GTK的选项,导致无法通过opencv直接生成窗口类。需要采取新的手段,比如说QT程序。