用QT5的QCamera实现USB摄像头之截图保存功能
通常来说Linux下可以通过V4L2接口及ioctl相关函数直接在底层调用摄像头设备,进行摄像头控制及图像预览和捕获,相对复杂。
QT5.0新增QMultimedia模块提供了更为方便的编程支持,模块涵盖了视,音频及摄像头功能,提供了QML类型和C++类用以处理多媒体内容。
环境: QT5.9.0 Qt CreatorUbuntu 16.04.6 LTSLinux-4.15.0-133-generic
1.创建Qt Widgets Application工程,并添加QT +=multimedia,QT+=multimediawidgets项
2双击mainwindow.ui启动qt designer可视化布局界面
首先在布局左侧放置一个Horizental Layout控件,修改对象名为ImageView,用于图像预览显示;再在右侧放一个Vertical Layout 控件,依次在其中放置一个label和4个Push Button,修改label的对象名为ImageCapture,用于显示捕获的图像,修改按钮的显示名称及对象名分别为buttonCapture, buttonOpen,buttonSave, buttonQuit,添加一个ComboBox存放摄像头列表,拖动控件到合适的布局,如图
3. mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include QMainWindow
#include QCamera
#include QCameraViewfinder
#include QCameraImageCapture
#include QFileDialog
namespace Ui {
class MainWindow;
}
class QCamera;
class QCameraViewfinder;
class QCameraImageCapture;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void openCamera(QString description=QString());
void enumCamera();
void bindRecoder(QCamera *camera);
private slots:
void captureImage();
void displayImage(int, QImage);
void saveImage();
void openCamera_on_clicked();
private:
Ui::MainWindow *ui;
QCamera *camera; //摄像头对象
QCameraViewfinder *viewfinder; //摄像头取景器
QCameraImageCapture *imageCapture; //截图对象
};
#endif // MAINWINDOW_
4. mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include QCameraInfo
#include QUrl
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui-setupUi(this);
// camera=new QCamera(this);
viewfinder = new QCameraViewfinder(this);
ui-Image

本文介绍如何在Linux环境下,利用QT5的QCamera模块,实现USB摄像头的打开、图像预览以及截图保存功能。通过创建Qt Widgets Application工程,添加QT += multimedia和QT += multimediawidgets项,结合QCamera、QCameraViewfinder和QCameraImageCapture类,完成摄像头控制和图像捕获。同时,文章提供了一个简单的V4L2接口和ioctl函数调用摄像头的示例,以便深入理解底层机制。

5360

被折叠的 条评论
为什么被折叠?



