QT5基于QCamera实现的各种摄像头(USB摄像头,系统摄像头,网络摄像头)显示,截图,保存功能

您所在的位置:网站首页 调用网络摄像头 QT5基于QCamera实现的各种摄像头(USB摄像头,系统摄像头,网络摄像头)显示,截图,保存功能

QT5基于QCamera实现的各种摄像头(USB摄像头,系统摄像头,网络摄像头)显示,截图,保存功能

2024-07-16 22:59| 来源: 网络整理| 查看: 265

最近两天苦恼于QT界面中USB摄像头的显示,还好今天成功解决,给大家分享一下 QT界面如下: 在这里插入图片描述 项目结构如下(本项目命名为QC_test): 在这里插入图片描述

话不多说,工程中四个文件的源码如下:

1.QC_test.pro:

QT += core gui QT +=multimedia QT +=multimediawidgets

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = QC_test TEMPLATE = app

SOURCES += main.cpp mainwindow.cpp

HEADERS += mainwindow.h

FORMS += mainwindow.ui

2.mainwindow.h:

#ifndef MAINWINDOW_H #define MAINWINDOW_H

#include < QMainWindow > #include < QCamera > #include < QCameraViewfinder > #include < QCameraImageCapture > #include < QCameraInfo > #include < QFileDialog > #include < QDebug > namespace Ui { class MainWindow; }

class QCamera; class QCameraViewfinder; class QCameraImageCapture;

class MainWindow : public QMainWindow { Q_OBJECT

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

private slots: void captureImage(); void displayImage(int,QImage); void saveImage();

private: Ui::MainWindow *ui; QCamera *camera; QCameraViewfinder *viewfinder; QCameraImageCapture *imageCapture; };

#endif // MAINWINDOW_H

3.main.cpp:

#include “mainwindow.h” #include < QApplication >

int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }

4.mainwindow.cpp:

#include “mainwindow.h” #include “ui_mainwindow.h”

MainWindow::MainWindow(QWidget parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QList list; list = QCameraInfo::availableCameras(); for (int i = 0; i < list.size(); i++) { qDebug() setScaledContents(true); camera->setViewfinder(viewfinder); camera->start(); connect(imageCapture, SIGNAL(imageCaptured(int,QImage)), this, SLOT(displayImage(int,QImage))); connect(ui->pushButton_Capture, SIGNAL(clicked()), this, SLOT(captureImage())); //** connect(ui->pushButton_Save, SIGNAL(clicked()), this, SLOT(saveImage())); //*** connect(ui->pushButton_Quit, SIGNAL(clicked()), qApp, SLOT(quit())); //***

}

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

void MainWindow::captureImage() { ui->statusBar->showMessage(tr(“正在捕获图片”), 1000); imageCapture->capture(); }

void MainWindow::displayImage(int , QImage image) { ui->label_Display->setPixmap(QPixmap::fromImage(image)); ui->statusBar->showMessage(tr(“捕获成功”), 5000); }

void MainWindow::saveImage() { QString fileName=QFileDialog::getSaveFileName(this, tr(“保存到文件”), QDir::homePath(), tr("jpeg格式文件(.jpg)")); if(fileName.isEmpty()) { ui->statusBar->showMessage(tr(“保存操作已取消”), 5000); return; } const QPixmap pixmap=ui->label_Display->pixmap(); if(pixmap) { pixmap->save(fileName); ui->statusBar->showMessage(tr(“保存成功”), 5000); } }

注意:

在这里插入图片描述

程序输出窗口中输出了两个相机设备的设备号 “@device:pnp:\?\usb#vid_0bda&pid_568a&mi_00#6&1ac3aa3a&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global” 和 “@device:pnp:\?\usb#vid_0edc&pid_2076&mi_00#6&3455a94a&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global” 第一个是我笔记本的系统摄像头,第二个是我连接的USB摄像头,在程序中我选择的是第二个,但是要注意,凡是出现\都要改成\,否则编译器会报错。 用QT驱动USB相机算是成功了,我原想使用QT+opencv,通过QLabel来刷新显示,但是没有成功,程序直接crashed,以后再试试吧,如果有人会的话,可以给我留言,感谢~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3