qt打开USB摄像头linux,用QT5的QCamera实现USB摄像头之截图保存功能

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

用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值