嵌入式 QT usb camera库驱动摄像头

news2024/11/27 0:20:27

目录

前言

​编辑 

1. 交叉编译 ffmpeg

 1.1 先拿到ffmpeg的压缩包

1.2 把ffmpeg源码复制到虚拟机,并解压压缩包 

1.3 解压之后我们要进入到解压文件中进行编译成库 

1.5 make 

1.6 make install

2.usbcame库使用 

  2.1 获取usbcame库并解压

 2.2 解压完成后我们进入到ussbcamer文件夹,就会看到有两个文件夹分别为include和lib

 2.3 拷贝上一章编译好的 ffmpeg 下的 include 到 usbcamera 下的 include

2.4  拷贝 ffmpeg 下的 lib 到 usbcamera 下的 lib

2.5 将usbcamera库添加到我们的工程 

3.Qwidget 的类提升 USBCameraWidget

 3.1 右键点击要提升的Qwidget,点击提升为:

3.2 然后我们要找到我们要提升的类名复制下来,USBCameraWidget 也是继承 Qwidget 父类而来:  

4 .编译 

4.1 编译

 4.2 出现如下问题 

4.3 应用程序输出错误 

5. 摄像头使用 

  5.1 摄像头初始化

5.2 拍照 

5.3 显示标签


前言

   为什么不用 QT 自带的摄像头类而使用 usbcamera 类呢? 因为现在市场上大部分用的都是 UVC 摄像头, 因为 UVC 摄像头 价格低,使用方便;免驱动安装;硬件接线少 USB 接口通用性强。UVC 是一种摄像头协议,USB 摄像头基本都是 UVC 协议的 很多商家都说摄像头”免驱”, 并不是真正免驱动,只不过是系统自带这个 UVC 驱动而已,所以它们敢说”免驱”. 因为 UVC 摄像头使用非常非常非常广泛,所以很多系统都集成了 UVC 驱动。

usbcamera 库需要 ffmpeg 的支持 ; 非常适合操作 uvc 摄像头 ; qt 自带的 QCamera 类更方便。

 

1. 交叉编译 ffmpeg

 1.1 先拿到ffmpeg的压缩包

1.2 把ffmpeg源码复制到虚拟机,并解压压缩包 

sudo tar -xf ffmpeg-3.4.5.tar.gz

1.3 解压之后我们要进入到解压文件中进行编译成库 

cd ffmpeg-3.4.5/

然后打开上面截图里面的文档里面有编译方法,这是 32 位系统的编译方法。

 

1.4 编译源码(32位系统),但是需要根据我们自己的编译器将配置源码的命令进行修改,需要修改的地方我们圈出来:

 

我用的交叉编译器为 arm-cortexa9-linux-gnueabihf- 。所以需要更改为:

./configure --cross-prefix=arm-cortexa9-linux-gnueabihf- --enable-cross-compile --target-os=linux --cc=arm
cortexa9-linux-gnueabihf-gcc --arch=arm --prefix=host --enable-shared --disable-static --disable-doc --disable
x86asm --enable-ffplay

如果使用的是 64 位的系统,则使用 64 位的编译器:以下是信盈达 A53 开发板的配置:

./configure --cross-prefix=aarch64-linux- --cpu=cortex-a53 --disable-asm --enable-cross-compile --target
os=linux --cc=aarch64-linux-gcc --arch=arm --prefix=$PWD/ffmpeg-3.4.5 --enable-shared --disable-static --
disbable-doc --disbale-x86asm

1.5 make 

1.6 make install

 完成后:


2.usbcame库使用 

  2.1 获取usbcame库并解压

tar -xf usbcamera.tar.gz  

 2.2 解压完成后我们进入到ussbcamer文件夹,就会看到有两个文件夹分别为include和lib

,如下:

 2.3 拷贝上一章编译好的 ffmpeg 下的 include usbcamera 下的 include

这个时候,include里面是没有东西的,我们可以进去看一下。

include 里面是用来放头文文件的,所以我们要把 ffmpeg include 下文件拷贝过来( 注意 ffmpeg 的安装路
);
cp include/lib* /home/xing/work/usbCamera/usbCamera/usbcamera/include/ -rf

2.4  拷贝 ffmpeg 下的 lib usbcamera 下的 lib

操作几乎和拷贝include头文件一样。

2.5 将usbcamera库添加到我们的工程 

只要把 ffmpeg.pri 加到我们的工程即可。 注意,不要以右击添加文件方式添加。在 xxx.pro 文件添加即可

 

include($$PWD/usbcamera/ffmpeg.pri)
INCLUDEPATH += $$PWD/usbcamera/

3.Qwidget 的类提升 USBCameraWidget

 3.1 右键点击要提升的Qwidget,点击提升为:

3.2 然后我们要找到我们要提升的类名复制下来,USBCameraWidget 也是继承 Qwidget 父类而来:  


4 .编译 

4.1 编译

解决方法:在pro文件添加network模块

 

 4.2 出现如下问题 

原因是当前使用的 qt 版本大于 5.5 ,使用了 QtMultimedia QtMultimediaWidgets ,这两个只有 Qt5 才有, QT4没有,这里我们使用 QT4 的方法来使用 usbcame ,界面把 5.5.0 更改为大于我们使用的版本(5.8 或者 5.9 ),注意,需要把所有的 5.5.0 都更改。在 usbcame.cpp usbcame.h 文件中

我们改成:

 

4.3 应用程序输出错误 

出现这个错误是没有库,把库复制到开发板。注意先压缩后再复制。

 修改后:

 

已经没有错误!


5. 摄像头使用 

  5.1 摄像头初始化

void Widget::cameraInit()
{
 ui->widget->setCameraName("/dev/video0"); //设置摄像头设备的驱动节点
 ui->widget->setInterval(120); //设置获取摄像头图像周期(ms),就是每隔多少 ms 获取一帧图像
 ui->widget->open();//打开摄像头
}
出现以下错误,原因是使用了 64 位的编译器,需要定义宏

 修改后再次运行就可以了:

 

5.2 拍照 

void Widget::on_takePhotoBtn_clicked()
{
 QImage img = ui->camerawidget->getImage(); //获取摄像头的一帧
QPixmap pix = QPixmap::fromImage(img); //转成 qpixmap
// ui->labVisiterHeader->setPixmap(pix.scaled(ui->labVisiterHeader->size()));//lable 显示
 QString fileName = QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss");
fileName += ".jpg";
#if 1
 QString path = QFileDialog::getExistingDirectory(this,tr("选择一个文件夹"),
 "/",
 QFileDialog::ShowDirsOnly |
QFileDialog::DontResolveSymlinks) ;

//qDebug() << "path=" <<path +"/" + fileName;
 /*保存图片*/
 if(pix.save(path + "/" + fileName) == false){
 qDebug( "pic save error" );
 }
#else
 if(pix.save("/root/"+fileName) == false){
 qDebug( "pic save error" );
 }
#endif
}

5.3 显示标签

void Widget::cameraInit()
{
 ui->usbCameraWidget->setOSD1Visible(true);
 ui->usbCameraWidget->setOSD1Format(USBCameraWidget::OSDFormat_Text);
 ui->usbCameraWidget->setOSD1Text("XYD");
 ui->usbCameraWidget->setOSD1Color(QColor(0, 255, 0));
 ui->usbCameraWidget->setOSD1FontSize(40);
 ui->usbCameraWidget->setOSD2Visible(true);
 ui->usbCameraWidget->setOSD2Format(USBCameraWidget::OSDFormat_DateTime);
 
ui->usbCameraWidget->setOSD2Position(USBCameraWidget::OSDPosition_Right_Bottom);
}

完成!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/662454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

zabbix-3-agent安装

1.CentOS release 5 1-1.centos5 32位 [rootLV zabbix]# cat /etc/redhat-release CentOS release 5 (Final) [rootLV zabbix]# uname -a Linux LV 2.6.18-53.el5xen #1 SMP Mon Nov 12 03:26:12 EST 2007 i686 i686 i386 GNU/Linux确定了系统centos5 32位rpm方式安装&#…

【深度学习】3-1 神经网络的学习- 学习基础/损失函数

学习基础 神经网络的学习。这里所说的“学习”是指从训练数据中自动获取最优权重参数的过程。 神经网络的特征就是可以从数据中学习。所谓“从数据中学习”&#xff0c;是指可以由数据自动决定权重参数的值。 数据驱动 数据是机器学习的命根子。从数据中寻找答案、从数据中发…

接口测试框架之APIAutoTest框架

目录 前言 框架简介 框架介绍 框架技术栈图 框架组件图 框架执行流程图 测试用例设计 测试报告 结语 前言 APIAutoTest框架是一款基于Python语言和unittest框架的API自动化测试框架。它可以帮助测试人员快速搭建API测试环境&#xff0c;并通过代码自动化实现API的测试…

每年降本100万元+!企业研发管理可以这样做....

随着市场的定制化需求越来越多&#xff0c;非标设计越来越多&#xff1b;订单交付周期要求短&#xff0c;导致设计人员的设计周期进一步压缩&#xff0c;设计准确率的重要性进一步提升&#xff0c;这些都对企业研发管理提出了更严峻的挑战。 本期干货内容分享 装备制造企业研发…

计算机网络基础学习指南

前言 计算机网络基础是研发/运维工程师都需掌握的知识&#xff0c;但往往会被忽略。 今天&#xff0c;我将对计算机网络基础学习进行详细阐述&#xff0c;涵盖 TCP / UDP协议、Http协议、Socket等&#xff0c;希望你们会喜欢。 1、计算机网络体系结构 1.1 简介 定义 计算机…

Linux基础学习之目录结构、ls命令

1、win系统可能有多个盘&#xff0c;那么就会对应多个文件树&#xff0c;但是Linux系统只有一个文件树&#xff0c;对应的也只有一个根目录&#xff0c;叫做 / 。 2、win与Linux表示层级关系的斜杠的方向不同&#xff0c;一个是斜杠&#xff0c;一个是反斜杠&#xff0c;Linux…

Three.js3D可视化介绍,以及本地搭建three.js官网

一、什么是Three.js three.js官网&#xff1a;https://threejs.org/ Three.js是一个基于WebGL的JavaScript 3D图形库&#xff0c;它可以轻松地在浏览器中创建3D场景和动画。同时&#xff0c;它支持外部模型和纹理的导入&#xff0c;让开发者可以更加便捷地创建出震撼的3D场景…

详细的聊一聊如何使用响应式图片,提升网页加载速度

开篇 确保图片在所有屏幕尺寸上都能良好显示是一项困难的任务&#xff0c;因为你需要考虑图片的大小、图片的放置位置、显示图片的比例、用户连接的速度等等众多因素。结果是&#xff0c;大多数开发者只会为所有屏幕尺寸使用同一张图片&#xff0c;并让浏览器调整图片的大小以适…

【SCI征稿】仅1个月22天录用,极速录用见刊,可接受智能交通,自动驾驶汽车,新型智能算法,智能交通系统,安全运输,交通拥堵等领域

智能算法类SCIE&EI ◆ 影响因子&#xff1a;4.0-5.0 ◆ 期刊分区&#xff1a;JCR2区&#xff0c;中科院3区 ◆ 检索情况&#xff1a;SCIE&EI 双检&#xff0c;正刊 ◆ 征稿领域&#xff1a;智能算法在智能交通中的应用&#xff0c;包括自动驾驶汽车、新型智能算法、…

20个ArcGIS Pro 提示和技巧

ArcGIS Pro是最通用的GIS软件在当今的行业中。为了帮助你充分利用ArcGIS Pro&#xff0c;我们整理了一份20个提示和技巧。 这些技巧包括从基本的定制选项到高级地理空间分析和数据可视化技巧。 链接地图视图 在ArcGIS Pro中链接视图有助于同步显示一个项目中的多个地图或场景…

java项目之汉服文化平台网站(ssm+vue)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的汉服文化平台网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&…

2017年全国硕士研究生入学统一考试管理类专业学位联考写作试题

2017年1月真题 四、写作&#xff1a;第56~57小题&#xff0c;共65 分。其中论证有效性分析30 分&#xff0c;论说文35分。 56、论证有效性分析&#xff1a; 分析下述论证中存在的缺陷和漏洞&#xff0c;选择若干要点&#xff0c;写一篇600字左右的文章&#xff0c;对论证的有…

GPT提示词系统学习-第二课-使用GPT帮你“填表格”

开篇 前面我们说到了GPT的提示词使用的好不好对你可以得到精准的答案是至关重要的。今天我们来看看,GPT中如何使用提示词来帮助我们填一个表格。 参照样本让GPT制作可填表格 请阅读以下销售邮件。删除任何可用于识别个人身份的信息 (PII),并用相应的占位符替换它。 例如,…

BIO-NIO-AIO案例

BIO-NIO-AIO案例 1、BIO编程 BIO 有的称之为 basic(基本) IO,有的称之为 block(阻塞) IO&#xff0c;主要应用于文件 IO 和网络 IO&#xff0c; 这里不再说文件 IO, 大家对此都非常熟悉&#xff0c;本次课程主要讲解网络 IO。 在 JDK1.4 之前&#xff0c;我们建立网络连接的时…

endnotex9 在word中插入参考文献遇到的问题

添加超链接 在EndNote X9中点击如下按钮 勾选如图所示选项后确认即可 找到插入文献的上标&#xff0c;按住“Ctrl”后鼠标点击即可跳转到对应文献 修改文献添加位置 先使用endnote插入一篇文献&#xff0c;然后到达插入文献的位置&#xff0c;右键点击。 选择切换域代码 将其…

国内首个,Postcat 上线 AI 生成 API 功能,写接口动几下就行

近期AI风潮席卷全球&#xff0c;Postcat 作为新一代 API 生产力工具&#xff0c;从发布的第一天起就在思考如何通过AIAPI以及插件化架构来更好的满足开发者的需求。 今天我们很高兴的向大家宣布&#xff0c;Postcat.com 正式上线 AI 生成 API 的功能&#xff0c;并且是国内首个…

【GO】 32.pprof

一 . 添加引用启动项目访问指标页面 1.1 在main程序添加pprof引用&#xff0c;并启动网页 "net/http" _ "net/http/pprof" go func() {log.Println(http.ListenAndServe(":6060", nil)) }() 1.2 访问pprof页面 http://127.0.0.1:6060/debug/…

10.MyBatis逆向工程

MyBatis逆向工程 正向工程&#xff1a;先创建Java实体类&#xff0c;由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。 逆向工程&#xff1a;先创建数据库表&#xff0c;由框架负责根据数据库表&#xff0c;反向生成如下资源&#xff1a; Java实体类Mapper接口M…

腾讯云服务器ping不通怎么解决?什么原因?

腾讯云服务器ping不通什么原因&#xff1f;ping不通公网IP地址还是域名&#xff1f;新手站长从云服务器公网IP、安全组、Linux系统和Windows操作系统多方面来详细说明腾讯云服务器ping不通的解决方法&#xff1a; 目录 腾讯云服务器ping不通原因分析及解决方法 安全组ICMP协…

CentOS7.9 k8s集群环境搭建

环境搭建 本次环境搭建需要安装三台Centos服务器(一主二从)&#xff0c;k8s采用1.25.4版本 主机安装 安装虚拟机过程中注意下面选项的设置&#xff1a; 操作系统环境&#xff1a;CPU(2C) 内存(4G) 硬盘(50G)语言选择&#xff1a;English软件选择&#xff1a;基础设施服务器分区…