QT 使用摄像头显示画面 并 拍照

一、前置说明

限制:

QT 相机 QCamera:只提供了有限的相机支持,如 取景器显示 和 拍照功能,大部分相机控制功能没有实现。

在 win7 上,无法用 QCamera 实现 视频录制功能

使用的类的说明:

QCamera 类用于打开系统的摄像头设备,

QCameraViewfinder 用于显示捕获的视频,

QCameraImageCapture 用于截图。

二、成果展示:

三、代码

0、前置:

在 pro 文件中加上一个依赖 QT += multimediawidgets

1、main.cpp

#include "CameraWidget.h"

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);

        CameraWidget w;
	w.show();

	return a.exec();
}

2、CameraWidget.h

#ifndef CAMERAWIDGET_H
#define CAMERAWIDGET_H

#include <QWidget>
class QCamera;
class QCameraViewfinder;
class QCameraImageCapture;

namespace Ui {
class CameraWidget;
}

class CameraWidget : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_pushButton_clicked();

private:
    Ui::CameraWidget *ui;

    QCamera *camera;
    QCameraViewfinder *viewfinder;
    QCameraImageCapture *imageCapture;
};

#endif // CAMERAWIDGET_H

3、CameraWidget.cpp

#include "CameraWidget.h"
#include "ui_CameraWidget.h"

#include <QtMultimedia/QCameraInfo> 
#include <QtMultimediaWidgets/QCameraViewfinder> 
#include <QtMultimedia/QCameraImageCapture>
#include <QFileDialog>
#include <QDebug>

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

	// 获取默认相机设备信息;
	QCameraInfo dc = QCameraInfo::defaultCamera();
	qDebug() << dc.description();

	// 获取所有可用相机列表;
    QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
    if(cameras.count() > 0) {
        foreach (const QCameraInfo &cameraInfo, cameras) {
            qDebug() << cameraInfo.description(); //相机描述信息;
			qDebug() << cameraInfo.deviceName(); //设备的唯一 ID,一串杂乱的编码;
        }
		camera = new QCamera(cameras.at(0));
    }

    viewfinder = new QCameraViewfinder(this);
    // 设置取景部件,普通部件使用 QCameraViewfinder;
	// 图形视图框架中使用 QGraphicsVideoItem;
	camera->setViewfinder(viewfinder);
    viewfinder->resize(600, 350);

	// QCameraImageCapture图像录制类,进行拍照;
    imageCapture = new QCameraImageCapture(camera);

    camera->start();
}

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

// 拍照按钮;
void CameraWidget::on_pushButton_clicked()
{
    camera->setCaptureMode(QCamera::CaptureStillImage);
    QString fileName = QFileDialog::getSaveFileName();
    // 捕捉图片时,先对相机进行锁定,完成捕捉后在进行解锁;
	camera->searchAndLock();
    // 捕捉图片并保存,异步函数,必须使用绝对路径;
	// 如果没有使用绝对路径,会将图片保存至默认目录;
    imageCapture->capture(fileName);
    camera->unlock();
}

4、CameraWidget.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>CameraWidget</class>
 <widget class="QWidget" name="CameraWidget">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>600</width>
    <height>400</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Widget</string>
  </property>
  <widget class="QPushButton" name="pushButton">
   <property name="geometry">
    <rect>
     <x>500</x>
     <y>360</y>
     <width>75</width>
     <height>23</height>
    </rect>
   </property>
   <property name="text">
    <string>拍照</string>
   </property>
  </widget>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>

 

要在VS2019中使用QT显示摄像头画面,你需要遵循以下步骤: 1.首先,确保已经安装好QT和VS2019,并且已经成功配置好了QT的插件。 2.在VS2019中创建一个新的QT项目,选择“QT Widgets Application”。 3.在QT的设计模式下,找到"悬浮窗口(QMainWindow)",将其拖动到主窗口上。 4.右键点击主窗口,选择“添加小部件”,添加一个“标签(QLabel)”和一个“按钮(QPushButton)”。 5.在MainWindow.h文件中添加必要的头文件,如:#include <QCamera>、#include <QCameraViewfinder>、#include <QCameraImageCapture>和#include <QVBoxLayout>。 6.在MainWindow.h文件中定义私有成员变量:QCamera *camera;、QCameraViewfinder *viewfinder;、QCameraImageCapture *imageCapture;和QVBoxLayout *layout;。 7.在MainWindow.cpp文件的构造函数中初始化成员变量,并创建布局。如: ``` MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { camera = new QCamera(this); viewfinder = new QCameraViewfinder(this); imageCapture = new QCameraImageCapture(camera); layout = new QVBoxLayout; layout->addWidget(viewfinder); layout->addWidget(button); QWidget *widget = new QWidget; widget->setLayout(layout); setCentralWidget(widget); camera->setViewfinder(viewfinder); camera->start(); connect(button, SIGNAL(clicked()), this, SLOT(captureImage())); } void MainWindow::captureImage() { QDateTime currentDateTime = QDateTime::currentDateTime(); QString fileName = "D:/" + currentDateTime.toString("yyyyMMdd_hhmmss") + ".jpg"; imageCapture->capture(fileName); } ``` 8.确保已在.pro文件中正确添加了QT += multimedia模块。 9.编译并运行项目,如果一切顺利,你会在主窗口中看到摄像头的实时画面。点击按钮可以拍下图片,并保存在指定的路径下。 这就是使用VS2019和QT显示摄像头画面的简单步骤。你可以根据自己的需要进一步定制和优化程序。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值