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();
}
}