Qt中显示摄像头数据(V4L2三)

2023-11-04

一、通过V4l2来采集用qt显示

1.将V4L2获取摄像头数据封装成一个类

class V4L2API
{
public:
    explicit V4L2API(const char *dev="/dev/video0");
    ~V4L2API();

    int video_init();//打开设备、设置采集格式等
    int video_start();//开始采集
    int video_stop();//停止采集
    int video_getframe(char *buffer, int *size);//读数据
    int video_destroy();//释放空间、关闭设备
    bool yuv422torgb24(unsigned char *buffer, unsigned char *rgbdata, int w, int h);//将YUV数据转化为RGB数据

private:
    int fd;
    char dev[64];
    unsigned char *mmps[4];//保存映射空间首地址
    unsigned int mmpsize[4];
};

2.设置开始按钮开始采集数据

void V4L2Win::on_startbt_clicked()
{
    if(v4l2api == nullptr)
    {
        v4l2api = new V4L2API("/dev/video0");//初始化摄像头对象
    }
    v4l2api->video_start();//开始采集
    //启动定时器,开始采集
    mtimer.start(100);
}

3.设置停止按钮停止采集数据

void V4L2Win::on_stopbt_clicked()
{
    //停止定时器
    mtimer.stop();
    if(v4l2api != nullptr)
    {
        v4l2api->video_stop();//停止采集
        v4l2api->video_destroy();
        delete v4l2api;
        v4l2api = nullptr;
    }
}

4.设置定时器不断采集数据

connect(&mtimer,&QTimer::timeout,this,&V4L2Win::get_frame);
void V4L2Win::get_frame()
{
    v4l2api->video_getframe(buffer,&size); //得到的是YUYV--4:2:2
    v4l2api->yuv422torgb24((unsigned char*)buffer, (unsigned char*)rgbdata, 640, 480); //把yuv4:2:2 转RGB

    QImage image((uchar*)rgbdata,640,480,QImage::Format_RGB888);
    ui->label->setPixmap(QPixmap::fromImage(image));
}

二、直接用qt多媒体模块来实现采集并且显示

1.在qt工程文件中添加

QT += multimedia
QT += multimediawidgets
QCamera  --摄像头设备
QCameraViewfinder--预览显示
QCameraImageCapture--数据抓取
QCameraInfo---摄像头信息

2.获取系统所有摄像头设备

Cameralist = QCameraInfo::availableCameras();
foreach (QCameraInfo info, Cameralist)
{
    qDebug()<<info.position()<<info.deviceName();
    ui->comboBox->addItem(info.description());
}

3.开启摄像头并且显示预览

QCameraInfo info = Cameralist.at(ui->comboBox->currentIndex()); //获取一个摄像头信息
camera = new QCamera(info);//通过摄像头信息创建设备
viewFinder = new QCameraViewfinder(ui->cameraView);//创建一个预览窗口
camera->setViewfinder(viewFinder);
viewFinder->resize(ui->cameraView->size());
viewFinder->show();
camera->start();//开始

4.初始化抓取数据的对象

imageCap = new QCameraImageCapture(camera);
    connect(imageCap,&QCameraImageCapture::imageCaptured,this,&ModelWin::get_frame);

5.发送抓取数据的信号

filename = QFileDialog::getSaveFileName(this);//选择文件存放的路径
imageCap->capture();//发送一个信号

6.数据抓取

image.save(filename);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt中显示摄像头数据(V4L2三) 的相关文章

  • 如何将图标放置到 QLineEdit 上?

    stackoverflow com 网站的右上角有一个带有放大镜头的搜索字段和一个灰色的 搜索 关键字 我想知道是否有可能实现相同的外观QLineEdit 如果是这样那怎么办 QLineEdit lineEdit new QLineEdit
  • QTableView 中的虚拟列?

    我开始学习 Qt4 模型 视图编程 我有初学者问题 我有一个简单的应用程序 其中显示 sqlite 表QTableView class Model QtSql QSqlTableModel def init self parent None
  • MAC 上的 QT/C++ - 未设置应用程序图标

    我正在努力解决的奇怪问题 在与我的 pro QT 项目文件相同的文件夹中 我有一个 Resources myIcon png 我试图将其设置为我构建的应用程序的图标 在 OSX 上运行 我阅读了文档 它建议在 pro 文件中添加 ICON
  • 仅将非模态 QDialog 窗口放置在我的应用程序顶部,而不是所有应用程序顶部

    我有一个 QDialog 窗口 它应该始终位于我的应用程序顶部 它不是模态的 用户可以随时与对话框和主应用程序进行交互 使用窗口保持在顶部提示在某种程度上实现了这一点 但是 该对话框仍然位于所有其他正在运行的应用程序 例如记事本 chrom
  • 如何在 C++ 和 QML 应用程序中使用 qrc?

    我在 Windows7 上用 c qnd Qt Creator QML 编写了 Qt Quick Desktop 应用程序 现在 我必须部署它 并且我需要隐藏 qml 文件和图像 意味着 将它们放入资源等中 我读到有一个很好的方法可以使用
  • 使用 cmake 将两种解决方案合二为一

    我有两个单独的 Visual Studio 2013 解决方案 我想将它们迁移到一个解决方案中 因为第一个解决方案 使用 Qt 充当第二个解决方案的 GUI 最后 我希望有一个结构如下的单一解决方案 Solution All Build P
  • 当我尝试构建 Qt 4.7.1 静态库时,“找不到 -ljscore”

    我尝试从最新的源构建静态 Qt 库 但出现以下错误 usr bin ld cannot find ljscore collect2 ld returned 1 exit status 如何解决这个问题呢 这是 Qt 构建系统中自 4 7 0
  • QDesktopServices::openUrl 在资源管理器中选择指定文件

    在大多数编码程序中 您可以右键单击该项目 然后单击 在资源管理器中显示 它会在资源管理器中显示选定项目的文件 在 Qt 中使用 QDesktopServices 如何做到这一点 或在 QT 中执行此操作的任何方式 您可以使用此方法在 Win
  • QT/QML Android App,点击通知栏时打开应用程序

    我为 Android 应用程序制作了一个 QT 当我单击平板电脑中上面看到的按钮通知栏时 但是 如果单击通知 我的应用程序将打开 聚焦 不知道 并显示黑色窗口 简单来说怎么做呢 我的代码是 package org ays operation
  • 如何在模型更改时停止ListView“跳跃”

    我需要做什么 我需要创建一个聊天窗口用一个ListView在 QML 中存储聊天消息 我设置listView positionViewAtEnd 以便跟踪最后的消息 我禁用positionViewAtEnd当我向上滚动时 我可以阅读过去的消
  • Qt 文件对话框默认后缀不起作用

    我将以下代码用于 QtQuick Dialogs 1 3 和 Qt 5 10 0 下 filedialog 的新属性 我使用 Qt Creator 5 10 默认套件构建它 import QtQuick 2 10 import QtQuic
  • 使用 Visual Studio 2013 构建 Qt 5.2.1 的静态版本

    几天来我一直在尝试使用 Visual Studio 2013 构建 Qt 的静态版本 我就是不明白我做错了什么 System Windows 7 64 位 Visual Studio 2013 仍安装 Visual Studio 2012
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • 如何使QTableView类的restoreState()和saveState()正常工作?

    首先 我想说 我的问题已经在这里讨论过 并且这里是 https stackoverflow com questions 1163030 qt qtableview and horizontalheader restorestate 但答案并
  • Qt - 无法让 lambda 工作[重复]

    这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • 如何检测QTableView中的双击

    我正在使用 PyQt 创建 GUI 应用程序 在继承自 QTableView 的视图中 需要检测用户双击行时选择的行 该表可以排序 但不能编辑 我该怎么做 注意 尝试了 doubleClicked int 信号 它是由鼠标按钮发出的 而不是
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 从 Qt4 中的文本文件中逐字读取

    我想在 Qt4 中逐字读取一个文本文件 说实话我对它很陌生 我想在另一个文件中每行一个字写入 我可以在 C 中做到这一点 没有任何问题 但是当我尝试在 Qt4 中使用 ifstream 和 ofstream 时 我遇到了错误 这是我的 Qt
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub

随机推荐

  • android退出所有Actiivty的实例方法

    import java util ArrayList import java util List import android app Activity import android app Application public class
  • 1个星期,教你快速上手Unity ASE-【预览】

    最近在学习Amplify Shader Editor插件 准备做几期笔记 希望能给csdn友们一些帮助 共同进步 以下是用到的参数截图 更多详情请去B站搜索 Cz wang 感谢博主的讲解 目录预览 1 效果传送 1 属性面板 2 操作面板
  • 恶意软件与APT

    1 什么是恶意软件 把未经授权便干扰或破坏计算机系统 网络功能的程序或代码 一组指令 称之为恶意程序 2 恶意软件有哪些特征 1 强制安装 2 难卸载 3 浏览器劫持 4 广告弹窗 5 恶意收集用户信息 6 恶意卸载其他软件 7 恶意捆绑
  • pytorch torch.nn.Identity() 是干啥的,解释。

    class Identity Module r A placeholder identity operator that is argument insensitive Args args any argument unused kwarg
  • 惊呆了!Spring Boot 还能远程调试?

    目录 前言 什么是远程调试 为什么要远程调试 什么是JPDA 如何开启远程调试 transport server suspend address onthrow onuncaught launch timeout 常用的命令 IDEA如何开
  • 基于门限算法的SM2协同签名算法分析-openssl源码验证

    基于门限算法的SM2协同签名算法分析 openssl源码验证 介绍 1 协同公钥生成流程 2 协同签名流程 3 正确性分析 4 使用openssl接口进行代码测试 5 测试源码 介绍 门限密码体制 是安全多方计算中对抗合谋攻击的一个重要工具
  • Python实现识别图片内容的方法分析

    Python实现识别图片内容的方法分析 本文实例讲述了Python实现识别图片内容的方法 分享给大家供大家参考 具体如下 python识别图片内容 这里我的环境为windows64位 python2 7 14 需要用到PIL模块和tesse
  • springboot事务管理 注解@Transactional 无效原因,及解决办法

    1 不需要在启动类加上 EnableTransactionManagement EnableTransactionManagement是 spring tx 的注解 不是 spring boot 的 spring boot 会自动配置事务
  • 篇八:冒泡排序

    交换排序的一种 author xiaocui date 2022年08月02日 13 49 public class BubbleSort public static void main String args int arr new in
  • React 列表 & Keys

    React 列表 Keys const numbers 1 2 3 4 5 const listItems numbers map number gt li number li ReactDOM render ul listItems ul
  • leecode 题目5 最长回文子串(python)

    给你一个字符串 s 找到 s 中最长的回文子串 示例 1 输入 s babad 输出 bab 解释 aba 同样是符合题意的答案 示例 2 输入 s cbbd 输出 bb 代码是根据B站上的一位up主写的 使用动态规划算法 从小字符串衍生相
  • css3新弹性盒子-flex-grow

    目录 flex grow 1 flex grow定义和用法 2 flex grow属性值 flex grow说明 flex grow实例 flex grow flex grow属性在CSS新弹性盒模型中是比较常用 想要用好它就先了解它的 语
  • 花卉识别卷积神经网络

    卷积神经网络做的花卉识别 keras 五分类 向日葵 雏菊 郁金香 玫瑰 蒲公英 之后更怎么做的
  • 【专题5: 硬件设计】 之 【68.开关电源 之 buck电路中的电感电流波形】

    嵌入式工程师成长之路 系列文章 总目录 系列文章总目录 希望本是无所谓有 无所谓无的 这正如脚下的路 其实地上本没有路 走的人多了 也便成了路 原创不易 文章会持续更新 欢迎微信扫码关注公众号 承接 小程序 嵌入式 PC端项目开发 联系作者
  • Arduino基础入门篇31—LCD1602液晶显示

    LCD1602也叫1602字符型液晶 是一种专门用来显示字母 数字 符号的点阵型液晶模块 能同时显示16X2即32个字符 本篇我们来认识LCD1602 驱动它显示 Hello World 1 LCD1602介绍 对于单片机爱好者和电子爱好者
  • php-cgi.exe - FastCGI 进程超过了配置的请求超时时限

    解决方案一 处理 php cgi exe FastCGI 进程超过了配置的请求超时时限 的问题 内容转载 处理 php cgi exe FastCGI 进程超过了配置的请求超时时限 的问题 php技巧 脚本之家 详细错误 HTTP 错误 5
  • 【华为OD机试真题 JAVA】出错的或电路

    JS版 华为OD机试真题 JS 出错的或电路 标题 出错的或电路 时间限制 1秒 内存限制 262144K 语言限制 不限 某生产门电路的厂商发现某一批次的或门电路不稳定 具体现象为计算两个二进制数的或操作时 第一个二进制数中某两个比特位会
  • 利用Java对后端数据进行分页处理(Java假分页)

    代码如下 import java util Collections import java util List java分页 辅助器 public class PageHelper
  • HttpClient远程调用工具类

    文章目录 前言 一 HttpClient工具类 二 使用步骤 1 引入库 前言 提示 当前工具类get方式无法传分页数据 可自行篡改 不行就用post方式哈哈 提示 以下是本篇文章正文内容 下面案例可供参考 一 HttpClient工具类
  • Qt中显示摄像头数据(V4L2三)

    目录 一 通过V4l2来采集用qt显示 1 将V4L2获取摄像头数据封装成一个类 2 设置开始按钮开始采集数据 3 设置停止按钮停止采集数据 4 设置定时器不断采集数据 二 直接用qt多媒体模块来实现采集并且显示 1 在qt工程文件中添加