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


学习内容:

  1. Qt5
  2. c++

学习产出:

一、介绍:

该部分主要实现了在Linux系统下,通过QT对multimedia、multimediawidgets库的使用,打开摄像头获取图像并显示在对应窗口,点击指定按钮时实现截图保存与显示。

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

二、实现

1.首先需要在.pro文件中添加

QT +=multimedia
QT+=multimediawidgets

2.mycamera.h

#ifndef MYCAMERA_H
#define MYCAMERA_H
#include 
#include 
#include 
#include 
#include 
#include QT_BEGIN_NAMESPACE
namespace 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.mycamera.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()<lineEdit_2->setText(picpath);//显示pix = pix.scaled(ui->label->size());ui->label_2->setPixmap(pix);
}

4.mycamera.ui

 

另外一种直接调用Ubuntu摄像头保存图片的方法:

打开shell终端,输入命令安装cheese工具。cheese工具就可以打开摄像头。
(1)在终端输入命令:sudo apt-get install cheese

(2)启动cheese工具
        在终端输入命令:cheese

可以右键选择保存特定的储存路径

参考文章:

在Linux系统下QT获取摄像头图像,显示在对应窗口_佳佳鸽的博客-CSDN博客_linux下使用qt获取所有外接摄像头名称

虚拟机内Ubuntu如何打开摄像头+解决cheese工具黑屏问题_熊凯瑞的博客-CSDN博客_ubuntu打开摄像头


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部