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

一、前置说明

限制:

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

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

使用的类的说明:

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

QCameraViewfinder 用于显示捕获的视频,

QCameraImageCapture 用于截图。

二、成果展示:

QT 使用摄像头显示画面 并 拍照_第1张图片

三、代码

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 
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  
#include  
#include 
#include 
#include 

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

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

	// 获取所有可用相机列表;
    QList 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



 CameraWidget
 
  
   
    0
    0
    600
    400
   
  
  
   Widget
  
  
   
    
     500
     360
     75
     23
    
   
   
    拍照
   
  
 
 
 
 

 

你可能感兴趣的:(Qt,qt)