qt5打开摄像头采集图像并拍照

2023-11-03

qt5打开摄像头  主要用了QCamera类  要在pro文件里加入  multimedia multimediawidgets这两个模块

QT += core gui multimedia multimediawidgets

QCamera是摄像头类

QCameraViewfinder 是取景器类,QCamera的拍到的图像就放在这里,QCameraViewfinder继承于QWidget类,使用的时候在ui里加入一个布局控件,然后再代码里添加进入QCameraViewfinder的对象,就ok了。

ui->verticalLayout->addWidget(cameraViewFinder);

 
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QCamera>
#include <QCameraViewfinder>
#include <QCameraImageCapture>

#ifdef Q_OS_ANDROID
    #include "opencv2/opencv.hpp"
    using namespace cv;
#endif



namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void cameraImageCaptured(int id, QImage image);

    void on_pushButton_3_clicked();

private:
    Ui::MainWindow *ui;

#ifdef Q_OS_ANDROID
    VideoCapture cap;
    Mat ImageTOmat(QImage image);    //QImage转Mat
    QImage MatTOimage(const Mat &inmat);  //Mat转QImage
#endif

    QCamera *camera;//系统摄像头设备
    QCameraViewfinder *cameraViewFinder;//摄像头取景器部件
    QCameraImageCapture *cameraImageCapture;//截图部件

    int number;



};

#endif // MAINWINDOW_H



#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    number = 0;

//    ui->label->setScaledContents(true);
//    ui->label->setFixedSize(160, 120);

    camera = new QCamera(this);//系统摄像头设备
    cameraViewFinder = new QCameraViewfinder(this);//摄像头取景器部件
    cameraImageCapture = new QCameraImageCapture(camera);//截图部件

    ui->verticalLayout->addWidget(cameraViewFinder);

    connect(cameraImageCapture,SIGNAL(imageCaptured(int,QImage)),this,SLOT(cameraImageCaptured(int,QImage)));

    cameraImageCapture->setCaptureDestination(QCameraImageCapture::CaptureToFile);
    camera->setCaptureMode(QCamera::CaptureStillImage);
    camera->setViewfinder(cameraViewFinder);
}

MainWindow::~MainWindow()
{
    delete ui;
}

//打开
void MainWindow::on_pushButton_clicked()
{
    camera->start();//启动摄像头
//    cap.open(0);
//    if(!cap.isOpened()) {
//        number ++;
//        ui->label->setText(tr("打不开 %1").arg(number));
//        return;
//    }
//    number = 0;
//    Mat img;
//    cap.read(img);
//    QImage ii = QImage((const uchar*)img.data,img.cols,
//                          img.rows,img.step,QImage::Format_RGB888).rgbSwapped();
//    ui->label->setPixmap(QPixmap::fromImage(ii));
}

//关闭
void MainWindow::on_pushButton_2_clicked()
{
    camera->stop();

    //cap.release();
}

//拍照
void MainWindow::on_pushButton_3_clicked()
{
    cameraImageCapture->capture();//捕获图像并保存到文件中   发出信号imageCaptured
}

void MainWindow::cameraImageCaptured(int id, QImage image)
{
    ui->label->setPixmap(QPixmap::fromImage(image));
}



#ifdef Q_OS_ANDROID

//Mat转QImage
QImage MainWindow::MatTOimage(const Mat &inmat)
{
    return QImage();

//    Mat mat = inmat.clone();
//    // 8-bits unsigned, NO. OF CHANNELS=1  8位无符号单通道
//        if(mat.type()==CV_8UC1)
//        {
//            // Set the color table (used to translate colour indexes to qRgb values)
//            //设置颜色表(用于将颜色索引转换为qRgb值)
//            QVector<QRgb> colorTable;
//            for (int i=0; i<256; i++)
//                colorTable.push_back(qRgb(i,i,i));
//            // Copy input Mat 复制输入 Mat
//            const uchar *qImageBuffer = (const uchar*)mat.data;
//            // Create QImage with same dimensions as input Mat
//            //创建与输入Mat相同尺寸的QImage
//            QImage img(qImageBuffer, mat.cols, mat.rows, mat.step, QImage::Format_Indexed8);
//            img.setColorTable(colorTable);
//            return img;
//        }
//        // 8-bits unsigned, NO. OF CHANNELS=3 8位无符号3通道
//        else if(mat.type()==CV_8UC3)
//        {
//            // Copy input Mat  复制输入 Mat
//            const uchar *qImageBuffer = (const uchar*)mat.data;
//            // Create QImage with same dimensions as input Mat
//            //创建与输入Mat相同尺寸的QImage
//            QImage img(qImageBuffer, mat.cols, mat.rows, mat.step, QImage::Format_RGB888);
//            return img.rgbSwapped();
//        }
//        else if(mat.type() == CV_8UC4) //8位无符号4通道
//        {
//            // Copy input Mat
//            const uchar *pSrc = (const uchar*)mat.data;
//            // Create QImage with same dimensions as input Mat
//            QImage image(pSrc, mat.cols, mat.rows, mat.step, QImage::Format_ARGB32);
//            return image.copy();
//        }
//        else
//        {
//            qDebug() << "ERROR: Mat could not be converted to QImage.";
//            return QImage();
//        }
}
//QImage转Mat
Mat MainWindow::ImageTOmat(QImage image)
{
    Mat mat;
    return mat;

//    Mat mat;
//    //qDebug() << image.format();
//    switch(image.format())
//    {
//        case QImage::Format_ARGB32:
//        case QImage::Format_RGB32:
//        case QImage::Format_ARGB32_Premultiplied:
//            mat = Mat(image.height(), image.width(), CV_8UC4, (void*)image.constBits(), image.bytesPerLine());
//            break;
//        case QImage::Format_RGB888:
//            mat = Mat(image.height(), image.width(), CV_8UC3, (void*)image.constBits(), image.bytesPerLine());
//            cv::cvtColor(mat, mat, COLOR_YUV2RGB_NV12);    //CV_BGR2RGB
//            break;
//        case QImage::Format_Indexed8:
//            mat = Mat(image.height(), image.width(), CV_8UC1, (void*)image.constBits(), image.bytesPerLine());
//            break;
//        default:
//            break;
//    }
//    return mat;
}

#endif



 

 

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

qt5打开摄像头采集图像并拍照 的相关文章

随机推荐

  • SSM+果园信息统计管理系统 毕业设计源码021103

    SSM果园信息统计管理系统 摘 要 随着互联网大趋势的到来 社会的方方面面 各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去 而其中最好的方式就是建立网络管理系统 并对其进行信息管理 由于现在网络的发达 果园信息统计管理系
  • 第三十八章、PyQt输入部件:QKeySequenceEdit快捷键输入部件使用案例

    专栏 Python基础教程目录 专栏 使用PyQt开发图形界面Python应用 专栏 PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一 功能简介 Key Sequence Edit输入部件是用于输入快捷键序列的一个部件 输
  • swagger展示枚举类型

    文章首发于个人博客 欢迎访问关注 https www lin2j tech 需求场景 在书写 swagger 文档的时候 有些字段是对应一个枚举的 在处理这类字段时 如果在 ApiModelProperty 中手动添加枚举值 可能会出现漏写
  • 好用的Typora笔记软件使用操作教程

    Typora简单使用教程 中文官网地址 textcolor black 中文官网地址 中文官网地址 https typoraio cn 这么好用的笔记软件大家还不赶快下手
  • JavaEE——MyBatis的简单介绍和使用

    MyBatis是什么 MyBatis是一个支持普通SQL查询 存储过程以及高级映射的持久层框架 他消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索 使用简单的XML或注解进行配置和原始映射 将接口和Java的POJO映射成数据
  • ERROR: Cannot install -r requirements.txt (line 2) and tensorflow>=1.14.0 because these package vers

    pip安装时出现问题 pip install force reinstall r requirements txt ERROR Cannot install r requirements txt line 2 and tensorflow
  • 12 SpringBoot整合RocketMQ实现过滤消息-根据TAG方式过滤消息

    消息发送端只能设置一个tag 消息接收端可以设置多个tag 接收消息端通过 设置多个tag 如下 tag1 tag2 tag3 上实例 生产端发送三个消息 TAG分别是TAG1 TAG2 TAG3 发送带Tag消息 测试根据Tag过滤消息
  • 毕业设计-基于机器颗粒状的农作物检测算法研究-YOLO

    目录 前言 课题背景和意义 实现技术思路 一 整体方案设计 二 基于 YOLO 的迁移学习算法 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几
  • curl post参数,接口接收不到数据问题

    今天遇到一个问题 注册下发短信失败 总提示无法发送注册短信 请从新发送 经检查 curl里面将post数据以json encode的方法转码之后传递 而且各选项设置感觉没有问题 怎么接口就接收不到post过去的数据的呢 在网上也搜索了不少网
  • 【git】git常用命令及所遇问题解决方法-小结

    git常用命令 小结 所遇到的问题会随时更新 git常用命令梳理 萌新git常用命令总结 要开始了哦 预备 走你 围攻git常用命令 1 git查看并设置用户名及邮箱 查看 git config user name git config u
  • 接口与自动化测试

    一 什么是接口 接口就是API 意思是应用程序编程接口 接口本质上程序开发的函数和方法 提供参数和返回值 二 接口组成的要素什么 接口访问的地址 请求的方法 参数 返回值 接口访问的地址 协议 IP地址或域名 端口号 应用名 功能名 请求的
  • IDEA使用Git更新项目提示:Push rejected: Push master to origin/master was rejected by remote

    失败的原因有很多 idea的提示不明确 网上答案大同小异的 网上说没有权限之类的 我的是自己创建的仓库 自己是管理员 直接排除这个选项 我们可以去你需要上传项目的文件夹 然后右键 选中Git Bash Here 打开 通过命令 git pu
  • 安装ubuntu出现空闲的空间不可用

    问题 我的系统已经安装了一win7 我先把其中一个70G的分区用于安装ubuntu 但在安装的过程中发现给ubuntu分了两个挂载点之后剩下的剩余空间显示为 不可用 并且也不能分配其他的挂载点了 请问谁知道可以怎样解决整个问题吗 解答 安装
  • IDEA打包jar包详尽流程

    打包流程 1 打开菜单栏File Project Structure 2 点击Artifacts 3 点击 JAR From module with depenencies 4 后弹出如下界面 自此开始 各种问题就来了 首先Module中
  • Django(2)-编写你的第一个 Django 应用

    本教程的目的是创建一个网络投票应用程序 它将由两部分组成 一个让人们查看和投票的公共站点 一个让你能添加 修改和删除投票的管理站点 创建应用 python manage py startapp polls 每一个应用是一个python包 一
  • ORA-17502 与 ORA-15173 错误解决

    用rman恢复spfile时 报错误如下 RMAN gt restore spfile from FLASHBACKDATA1 ORAC AUTOBACKUP 2010 05 16 s 719137976 308 719137979 Sta
  • python关键字保留字

    and 逻辑运算符 as 创建别名 assert 用于调试 break 跳出循环 class 定义类 continue 继续循环的下一个迭代 def 定义函数 del 删除对象 elif 在条件语句中使用 等同于 else if else
  • 小学生编程入门视频-机器人背后的机关密语

    学校要举办Mabot机关门设计比赛 在这个视频教程中就让我们一起看看 运用Mabot能做出怎样有趣的设计吧 查看完整视频教程 先来看看我们的设计理念吧 首先机关A的大门在触发下能够自动打开和关闭 机关B能检测外界干扰并闪灯报警 然后把信号发
  • Mac下载iReport安装之后无法打开解决办法

    iReport的运行是依赖于JDK的 我使用的是Mac系统 下载的iReport 5 0 0 dmg版本 iReport 5 0 0 dmg百度网盘下载地址 链接 https pan baidu com s 1ECTVHMvtM0fyK4
  • qt5打开摄像头采集图像并拍照

    qt5打开摄像头 主要用了QCamera类 要在pro文件里加入 multimedia multimediawidgets这两个模块 QT core gui multimedia multimediawidgets QCamera是摄像头类