linux下打开摄像头拍照并保存图片+Ubuntu

学习内容: Qt5c++学习产出:
一、介绍:
该部分主要实现了在Linux系统下 , 通过QT对、库的使用 , 打开摄像头获取图像并显示在对应窗口 , 点击指定按钮时实现截图保存与显示 。
首先设计UI界面的主要控件 , 包括:用于显示摄像头信息 , 图片保存路径的文本框 , “开始”按钮 , “停止”按钮 , “截屏”按钮 , 分别对应的功能为:摄像头开始采集图片数据;摄像头停止采集图片数据;截出当前界面摄像头画面 。然后将三个按钮分别转到槽函数实现对应的功能 。.pro文件中需要添加QT +=和QT+= , Qt 模块主要为实现多媒体应用提供了丰富的接口 , 可以轻松地使用平台的相机和收音机等 。继承自 , 所以它可以作为一个普通窗口部件进行显示 , 也可以嵌入到其它窗口中 。将指定为的视频输出窗口后 , 就可以显示播放的视频画面 。在“开始”按钮的触发函数中 , 首先通过(基于qt平台用于读取计算机摄像头视频信号的接口函数)获取当前可用摄像头信息 , 并显示给控件 , 方便用户观察摄像头信息 。构造摄像头对象、截屏对象 , 将显示图像对应的label控件和槽函数连接起来 。并设置显示的方式为自适应控件大小 。将断开摄像头的信号与相应的函数连接() 。截屏功能的实现首先把转换成 , 然后将图片保存在指定路径位置 , 并将路径位置显示在UI界面的label框里 , 分别完成截屏图像和路径位置对应label框槽函数的连接 , 注意绑定显示的具体内容 , 图片格式和路径格式 。
二、实现
1.首先需要在.pro文件中添加
QT +=
QT+=

linux下打开摄像头拍照并保存图片+Ubuntu

文章插图
2..h
#ifndef MYCAMERA_H#define MYCAMERA_H#include #include #include #include #include #include QT_BEGIN_NAMESPACEnamespace Ui { class MyCamera; }QT_END_NAMESPACEclass MyCamera : public QWidget{Q_OBJECTpublic:MyCamera(QWidget *parent = nullptr);~MyCamera();private slots:void on_pushButton_start_clicked();void on_pushButton_stop_clicked();void on_pushButton_capture_clicked();//显示图片void show_pic(int id, const QImage &preview);private:Ui::MyCamera *ui;QCamera *ca;//摄像头对象QCameraViewfinder *w;QCameraImageCapture *cap;//截屏对象};#endif // MYCAMERA_H
3..cpp
#include "mycamera.h"#include "ui_mycamera.h"#include #include MyCamera::MyCamera(QWidget *parent): QWidget(parent), ui(new Ui::MyCamera){ui->setupUi(this);//获取系统中可用的摄像头信息QList infos = QCameraInfo::availableCameras();//显示到下拉列表foreach(QCameraInfo info,infos){qDebug()<comboBox->addItem(info.deviceName());}ui->pushButton_stop->setEnabled(false);ui->pushButton_capture->setEnabled(false);}MyCamera::~MyCamera(){delete ui;}//开始void MyCamera::on_pushButton_start_clicked(){//构造摄像头对象ca = new QCamera(ui->comboBox->currentText().toUtf8(),this);//构造截屏对象cap = new QCameraImageCapture(ca,this);//连接截屏信号和显示截屏图像的槽QObject::connect(cap,&QCameraImageCapture::imageCaptured,this,&MyCamera::show_pic);#if 0//使用父类对象构造显示窗口类w = new QVideoWidget(ui->label);#elsew = new QCameraViewfinder(ui->label);//定义取景器指针对象#endif//调整大小一致w->resize(ui->label->size());//设置摄像头的显示窗口ca->setViewfinder(w);w->show();//启动摄像头ca->start();//禁止开始按钮ui->pushButton_start->setEnabled(false);ui->pushButton_stop->setEnabled(true);ui->pushButton_capture->setEnabled(true);}//停止void MyCamera::on_pushButton_stop_clicked(){//停止摄像头ca->stop();//隐藏显示窗口w->hide();//断开信号QObject::disconnect(cap,&QCameraImageCapture::imageCaptured,this,&MyCamera::show_pic);delete w;delete cap;delete ca;ui->pushButton_start->setEnabled(true);ui->pushButton_stop->setEnabled(false);ui->pushButton_capture->setEnabled(false);}//截屏void MyCamera::on_pushButton_capture_clicked(){cap->capture();//不能立即显示图片}//显示截屏图片void MyCamera::show_pic(int id, const QImage &preview){qDebug()