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

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

效果图如下

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

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

4,编码

#ifndef CAMERADIALOG_H
#define CAMERADIALOG_H

#include <QDialog>
#include <QCamera>
#include <QCameraViewfinder>
#include <QCameraImageCapture>
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();
    }
}

  • 3
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
你可以按照以下步骤使用QT的QCamera打开USB相机拍照: 1. 首先,需要在.pro文件中添加multimedia模块,添加方式如下: ``` QT += multimedia ``` 2. 在代码中,需要引入QCamera和QCameraViewfinder类。 ```c++ #include <QCamera> #include <QCameraViewfinder> ``` 3. 创建QCamera对象和QCameraViewfinder对象,并将它们关联起来。可以将QCameraViewfinder对象设置为QWidget或QGraphicsWidget的子类。 ```c++ QCamera *camera = new QCamera(this); QCameraViewfinder *viewfinder = new QCameraViewfinder(this); viewfinder->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); viewfinder->resize(400, 300); camera->setViewfinder(viewfinder); ``` 4. 调用QCamera对象的searchAndLock()函数,查找可用的相机设备并锁定它。 ```c++ camera->searchAndLock(); ``` 5. 调用QCamera对象的start()函数,启动相机。 ```c++ camera->start(); ``` 6. 调用QCamera对象的capture()函数,拍照并保存。 ```c++ camera->capture("image.jpg"); ``` 完整代码示例: ```c++ #include <QCamera> #include <QCameraViewfinder> #include <QVBoxLayout> #include <QPushButton> class CameraWidget : public QWidget { Q_OBJECT public: CameraWidget(QWidget *parent = nullptr) : QWidget(parent) { QVBoxLayout *layout = new QVBoxLayout(this); viewfinder = new QCameraViewfinder(this); viewfinder->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); viewfinder->resize(400, 300); layout->addWidget(viewfinder); QPushButton *captureButton = new QPushButton("Capture", this); connect(captureButton, &QPushButton::clicked, this, &CameraWidget::capture); layout->addWidget(captureButton); camera = new QCamera(this); camera->setViewfinder(viewfinder); camera->searchAndLock(); camera->start(); } private: QCamera *camera; QCameraViewfinder *viewfinder; private slots: void capture() { camera->capture("image.jpg"); } }; ``` 这样就可以通过QT的QCamera打开USB相机拍照了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lsa_BigDevil

你的行动是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值