QT打开摄像头采集
QT打开摄像头采集
今天好不容易把opencv的环境装好,然后想学习一下人脸识别的功能,但是在图书馆坐了4个多小时了,屁股疼就先写个摄像头采集的功能,明天继续学习吧,废话不多,嚼个奶片开始发车!!!!!!!!
我们设计我们的UI界面
非常简单!
UI界面设计
就这么简单,我们在Widget里显示图像,然后这个下拉框用来选择摄像头
然后我们来编写我们的代码
代码编写
widget.h文件
#include <QWidget>
#include <QMouseEvent>
class QCamera;
class QCameraViewfinder;
class QCameraImageCapture;
class QCameraInfo;
class QCameraViewfinderSettings;
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
QCamera *camera; //相机
QCameraViewfinder *viewfinder; //取景器
QList<QCameraInfo> cameras; //相机列表
};
widget.cpp文件
#include "widget.h"
#include "ui_widget.h"
#include <QCamera>
#include <QCameraInfo>
#include <QCameraViewfinder>
#include <QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
// 获取所有可用的相机信息
cameras = QCameraInfo::availableCameras();
if(cameras.count() > 0) {
// 如果有可用的相机,则使用第一个相机创建QCamera实例
camera = new QCamera(cameras.at(0));
}
// 创建一个取景器QCameraViewfinder,并设置其父对象为当前Widget
viewfinder = new QCameraViewfinder(this);
// 将取景器设置为相机的取景器
camera->setViewfinder(viewfinder);
// 设置取景器的大小
viewfinder->resize(600, 350);
// 启动相机
camera->start();
// 添加初始化的相机选项到下拉框
for(const QCameraInfo &cameraInfo:cameras) {
ui->comboBox_cam->addItem(cameraInfo.description());
}
// 默认选择第一个相机
ui->comboBox_cam->setCurrentIndex(0);
// 连接下拉框camera的选择改变信号到槽函数,用于更换相机
connect(ui->comboBox_cam, QOverload<int>::of(&QComboBox::activated), [=](int index){
camera->stop();
delete camera;
camera = new QCamera(cameras[index]);
camera->setViewfinder(viewfinder);
camera->start();
});
}
Widget::~Widget()
{
delete ui;
delete camera;
}
// 移除了captureImage函数和相关的信号连接
好嘞,去吃饭去了,再不去没饭了