QT如何使用QCamera打开USB相机和拍照的实现(五)

1,项目介绍:QT打开USB相机前最常用的有两种方式,第一种就是调用第三方库使用opencv打开USB摄像机,抓取相机的每一帧然后现在控件上形成画面,第二种方式就是使用QT自带的API QCamer打开usb相机进行获取每一帧图像数据绘制到空间上。本章主要介绍 QT 如何使用QCamera对象进行打开相机,

效果图如下

QT如何使用QCamera打开USB相机和拍照的实现(五)_第1张图片

2 ,项目配置:在qt的pro文件中配置 multimedia multimediawidgets

QT如何使用QCamera打开USB相机和拍照的实现(五)_第2张图片

3, UI界面显示设计主要包含了4个简单的控件,2个QLable和2个QPushButton控件,2个QLable一个用来显示摄像的实时画面,另一个是用来显示拍照截取的图片。设计图如下

QT如何使用QCamera打开USB相机和拍照的实现(五)_第3张图片

4,编码

#ifndef CAMERADIALOG_H
#define CAMERADIALOG_H

#include 
#include 
#include 
#include 
namespace Ui {
class CameraDialog;
}

class CameraDialog : public QDialog
{
    Q_OBJECT

public:
    explicit CameraDialog(QWidget *parent = nullptr);
    ~CameraDialog();
    QString FaceImg;
private slots:
    void on_pushButton_paizhao_clicked();
    void captureImage();
    void displayImage(int,QImage);
    void on_pushButton_clicked();

private:
    Ui::CameraDialog *ui;
    QCamera *camera; //对系统摄像头进行封装
    QCameraViewfinder *viewfinder; //提供一个展示窗口
    QCameraImageCapture *CamerimageCapture;//对记录的媒体资源进行捕捉

};

#endif // CAMERADIALOG_H
#include "cameradialog.h"
#include "ui_cameradialog.h"

CameraDialog::CameraDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::CameraDialog)
{
    ui->setupUi(this);
    this->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint);
    camera = new QCamera(this);
    camera=new QCamera(this);
    viewfinder=new QCameraViewfinder(ui->ImageCapture_SHOW);
    CamerimageCapture=new QCameraImageCapture(camera);
    //ui->ImageCapture;

//    //设置采集模式
    CamerimageCapture->setCaptureDestination(QCameraImageCapture::CaptureToFile);
    camera->setCaptureMode(QCamera::CaptureStillImage);//将其采集为图片
    camera->setCaptureMode(QCamera::CaptureMode::CaptureViewfinder);//将采集到取景器中

    camera->setViewfinder(viewfinder);
    camera->start();
    connect(CamerimageCapture, SIGNAL(imageCaptured(int,QImage)), this, SLOT(displayImage(int,QImage)));
}

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

void CameraDialog::on_pushButton_paizhao_clicked()
{
    captureImage();
}

void CameraDialog::captureImage()
{
    CamerimageCapture->capture();
}

void CameraDialog::displayImage(int , QImage image)
{
    ui->label_ImgShow->setPixmap(QPixmap::fromImage(image));
}

void CameraDialog::on_pushButton_clicked()
{
    const QPixmap* pixmap=ui->label_ImgShow->pixmap();
    if(pixmap) {
        pixmap->save("paizhao.jpg");
        FaceImg = "paizhao.jpg";
        close();
    }
}

你可能感兴趣的:(QT小项目开发整理)