QT调用摄像头拍照

1、在Qt的pro文件中添加模块

QT += multimedia multimediawidgets 

这一行代码是用来在项目中使用Qt的多媒体模块。

Qt Multimedia 是Qt的一个重要模块,它提供了许多C++类和QML模块来进行多媒体内容的展示和处理,还提供了一些访问录音机和摄像头的必要的API。

Qt Multimedia Widgets 提供了简易直观的多媒体窗体。在使用时,需要包含这两个模块对应的头文件,建议根据需要包含相关头文件。对于Qt工程的pro文件,需要将这两个模块添加在Qt的pro文件中以在项目中导入该模块。

2、需要使用到的用于处理和操作摄像头相关功能的类库

①添加头文件

#include <QCamera>                //管理摄像头的大类
    它是用于管理摄像头设备及其功能的基类。
#include <QCameraInfo>            //管理摄像头的设备表
    该类提供有关可用摄像头设备的信息,如设备名称、设备ID等。
#include <QCameraViewfinder>      //管理摄像头显示区域
    用于管理摄像头视图查找器,即显示摄像头实时画面的区域。
#include <QCameraImageCapture>    //管理图片
    用于在摄像头设备上捕获图像,以及管理图像的捕获和保存。

#include <QDateTime>            //管理时间
#include <QString>              //管理字符串

这些类库通常用于构建具有摄像头功能的Qt应用程序,如视频录制、图片捕捉、摄像头控制等。通过使用这些类库,你可以方便地访问和控制摄像头设备,并与其交互。请注意,为了使用这些类库,你需要先确保你的Qt开发环境已经配置正确,并且支持摄像头功能。

②在private中创建摄像头对象

private:
    QCamera               *Camera;        //使用这个类,实例化出来,用指针接收
    QList<QCameraInfo>    Infolist;       //用于保存可用摄像头                          
    QCameraViewfinder     *Viewfinder;
    QCameraImageCapture   *ImageCapture;

3、打开摄像头

1、调用可选摄像头
//获取当前可用摄像头设备
Infolist = QCameraInfo::availableCameras();
//定义it指针(作用:遍历可用摄像头设备的表)
QList<QCameraInfo>::iterator it;
//循环操作,将可用摄像头设备名称添加到下拉框中
for(it = Infolist.begin(); it != Infolist.end(); it++)
{
    //在ui的cbb组件(下拉框)中添加一个新的项,description()返回一个字符串
    ui->cbb->addItem((*it).description());
}

2、选择摄像头,使用Qt库中的QCamera类来初始化一个摄像头对象
//获取使用摄像头的名称(通过ui->cbb->currentIndex()获取当前选择的索引,然后通过At函数获取该索引处的QCameraInfo对象)
QCameraInfo Infoname = Infolist.at(ui->cbb->currentIndex());
//然后使用这个QCameraInfo对象来初始化一个新的QCamera对象。
Camera = new QCamera(Infoname);

3、摄像头显示设置
//QCameraViewfinder是Qt框架中用于表示摄像头预览窗口的类
//设置摄像头显示的区域
Viewfinder = new QCameraViewfinder(ui->lb1);
Camera->setViewfinder(Viewfinder);
//设置摄像头显示的范围
Viewfinder->resize(ui->lb1->width(),ui->lb1->height());

4、开启摄像头准备工作
Viewfinder->show();
Camera->start();

4、拍照

1、拍摄图片保存格式设置
//获取当前时间
QDateTime Time(QDateTime::currentDateTime());
//当前时间转变为文本格式
QString datetime = Time.toString("yyyy-mm-dd hh-mm-ss");
//组装文件名(路径+名称)
QString fliename = QString("D:/picture/%1.jpg").arg(datetime);

2、保存图片
//用于将图像对象(QImage)以给定的文件名('filename')保存为文件。
Image.save(filename);

3、图片显示设置
ui->lb2->setPixmap(QPixmap(fliename));  //显示图片
ui->lb2->setScaledContents(true);       //自适应图片的大小

5、连接

1、捕获图像
//QCameraImageCapture用于在摄像头设备上捕获图像,以及管理图像的捕获和保存。
ImageCapture = new QCameraImageCapture(Camera);  
connect(ImageCapture,&QCameraImageCapture::imageCaptured,this,&MainWindow::tack_pic);

6、

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QCamera>              //管理摄像头的大类
#include <QCameraInfo>          //管理摄像头设别表
#include <QCameraViewfinder>    //管理摄像头显示区域
#include <QCameraImageCapture>  //管理图片

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void on_pb_option_clicked();

    void on_pb_camera_clicked();

    void tack_pic(int id,const QImage &Image);

private:
    Ui::MainWindow *ui;

    QCamera *Camera;                    //使用这个类,实例化出来,用指针接收
    QList<QCameraInfo>  Infolist;       //用于保存可用摄像头
    QCameraViewfinder   *Viewfinder;
    QCameraImageCapture *ImageCapture;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QCamera>              //管理摄像头的大类
#include <QCameraInfo>          //管理摄像头的设备表
#include <QCameraViewfinder>    //管理摄像头显示区域
#include <QCameraImageCapture>  //管理图片
#include <QDateTime>            //管理时间
#include <QString>              //管理字符串

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

    setWindowTitle("拍摄照片");
    setFixedSize(1020, 690);

    //获取当前可用摄像头设备
    Infolist = QCameraInfo::availableCameras();

    //定义it指针,作用:遍历可用摄像头设备的表
    QList<QCameraInfo>::iterator it;
    //循环操作,将可用摄像头设备名称添加到下拉框中
    for(it = Infolist.begin(); it != Infolist.end(); it++)
    {
        //在ui的cbb组件(下拉框)中添加一个新的项,description()返回一个字符串
        ui->cbb->addItem((*it).description());
    }
}

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

void MainWindow::on_pb_option_clicked()
{
    //获取使用摄像头的名称
    QCameraInfo Infoname = Infolist.at(ui->cbb->currentIndex());
    Camera = new QCamera(Infoname);

    Viewfinder = new QCameraViewfinder(ui->lb1);
    //设置摄像头显示的区域
    Camera->setViewfinder(Viewfinder);
    //设置摄像头显示的范围
    Viewfinder->resize(ui->lb1->width(),ui->lb1->height());

    //摄像头设备开始工作
    Viewfinder->show();
    Camera->start();

    ImageCapture = new QCameraImageCapture(Camera);
    connect(ImageCapture,&QCameraImageCapture::imageCaptured,this,&MainWindow::tack_pic);
}

void MainWindow::tack_pic(int id,const QImage &Image)
{
    //获取当前时间
    QDateTime Time(QDateTime::currentDateTime());
    //当前时间转变为文本格式
    QString datetime = Time.toString("yyyy-MM-dd-hh-mm-ss");
    //组装文件名(路径+名称)
    QString filename = QString("E:/pic/%1.jpg").arg(datetime);

    //保存图片
    //用于将图像对象(QImage)以给定的文件名('filename')保存为文件。
    Image.save(filename);

    ui->lb2->setPixmap(QPixmap(filename));  //显示图片
    ui->lb2->setScaledContents(true);       //自适应图片的大小
}

void MainWindow::on_pb_camera_clicked()
{
    ImageCapture->capture();
}


  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值