先感谢香橙派群的管理员耐心指导,经过不断的调试修改最后成功通过opencv调用mipi摄像头获取画面
就记录分享一下大概步骤希望大家少踩点坑!!!!!!
我用的固件系统是ubuntu2022.0.4
固件是: Orangepi5_1.1.6_ubuntu_jammy_desktop_gnome_linux5
.10.110.img
想通过opencv获取画面得先安装opencv,注意安装的时候先安装opnecv需要的相关环境,不然可能会安装到一半就报错,百度也可以找到安装教程,如果实在不会安装貌似这个系统里面也有一个默认的openncv,4.5.0版本的,在终端输入这个 :**pkg-config --modversion opencv4 ** 能看见版本。
如果你也是用qt获取摄像头画面 先在pro文件里面导入opencv相关的lib库文件和头文件
INCLUDEPATH引入的路径因自己的opencv头文件路径而定,这里注意引入路径到opecv4就可以了,如果到opecv4/opecnv2使用的时候可能会出现相关的头文件找不到
LIBS里面对应的库文件,我理解是对应usr/lib里面的相关so库文件
下面的代码就可以实现图像的获取,只需要把方法里面的代码复制到你的方法里面就行
void ShowImage::run()
{
VideoCapture cat("v4l2src device=/dev/video51 io-mode=4 ! video/x-raw,format=NV12,width=720,height=576,framerate=15/1 ! appsink ",CAP_GSTREAMER);
if(!cat.isOpened()){
qDebug()<<"无法打开摄像头节点";
}
Mat fram;
Mat mat;
while (true) {
cat.read(fram);
if(fram.empty()){
qDebug()<<"没有数据";
break;
}
cvtColor(fram,mat,cv::COLOR_YUV2RGB_NV12);//如果不转换QImage取不到数据
QImage img = QImage(mat.data,mat.cols,mat.rows,mat.step,QImage::Format_RGB888);
}
qDebug()<<"摄像头打开成功";
}
如果你遇到以下警告,那很有可能是你的VideoCapture cat(参数)这个里面参数有问题,这个里面的参数数据是来自于usr/local/bin/test_carema.sh 这个执行文件的内容进行修改的,不能全部复制
(qt_demo2:17300): GLib-GObject-WARNING **: 16:04:49.922: invalid cast from 'GstAppSink' to 'GstBin'
(qt_demo2:17300): GStreamer-CRITICAL **: 16:04:49.923: gst_bin_iterate_elements: assertion 'GST_IS_BIN (bin)' failed
(qt_demo2:17300): GStreamer-CRITICAL **: 16:04:49.924: gst_iterator_next: assertion 'it != NULL' failed
(qt_demo2:17300): GStreamer-CRITICAL **: 16:04:49.924: gst_iterator_free: assertion 'it != NULL' failed
[ WARN:0] global ./modules/videoio/src/cap_gstreamer.cpp (963) open OpenCV | GStreamer warning: cannot find appsink in manual pipeline
[ WARN:0] global ./modules/videoio/src/cap_gstreamer.cpp (616) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
截图留念