当前位置: 首页 > wzjs >正文

网络网站开发设计网站建设服务ysaigo

网络网站开发设计,网站建设服务ysaigo,嘉兴网站推广公司,郑州软件开发工资系列文章目录 Qt软件开发-摄像头检测使用软件V1.1 文章目录 系列文章目录前言一、V1.1增加了哪些功能?二、代码构成1.总体结构2. 代码内容 三、效果展示图总结 前言 之前,在Qt软件开发-摄像头检测使用软件:https://blog.csdn.net/xuming204…

系列文章目录

Qt软件开发-摄像头检测使用软件V1.1


文章目录

  • 系列文章目录
  • 前言
  • 一、V1.1增加了哪些功能?
  • 二、代码构成
    • 1.总体结构
    • 2. 代码内容
  • 三、效果展示图
  • 总结


前言

之前,在Qt软件开发-摄像头检测使用软件:https://blog.csdn.net/xuming2044/article/details/145054460?spm=1011.2415.3001.5331,实现了一个简单的本地摄像头检测和使用软件,由于功能比较单一,只能实现两个功能:1、本地摄像头的检测、2、摄像头的使用。于是在此基础上,有了Qt软件开发-摄像头检测使用软件V1.1。


一、V1.1增加了哪些功能?

  1. 拍照功能:对当前画面进行拍照并保存到指定目录下;
  2. 录像功能:对当前正在显示的摄像头画面进行录屏,并以视频文件的形式保存到本地指定目录下;

二、代码构成

1.总体结构

在这里插入图片描述

2. 代码内容

main.cpp:

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);cameras = QMediaDevices::videoInputs();//这里会返回所有可用的摄像头//qDebug() << "cameras.size:" <<cameras.size();for (const QCameraDevice &cameraDevice : cameras) {//将摄像头列表的描述的信息显示到lw_camerasui->lw_cameras->addItem(cameraDevice.description());}//cam = new QCamera(QMediaDevices::defaultVideoInput());//使用默认的集成摄像头//QCamera defCamera(QCameraDevice());//cap = new QMediaCaptureSession(this);//cap->setCamera(cam);cap.setVideoOutput(ui->video_widget);//显示画面到videoWidgetimage_cap.setFileFormat(QImageCapture::JPEG);//设置拍照保存的格式image_cap.setQuality(QImageCapture::VeryHighQuality);//设置拍照的质量cap.setImageCapture(&image_cap);//设置保存图像的对象media_format.setFileFormat(QMediaFormat::AVI);//设置视频的文件格式// media_format.setAudioCodec(QMediaFormat::AudioCodec::MP3);//设置音频编解码// media_format.setVideoCodec(QMediaFormat::VideoCodec::MPEG2);//设置视频编解码video_recorder.setMediaFormat(media_format);//初始化设置文件格式信息video_recorder.setQuality(QMediaRecorder::VeryHighQuality);//设置视频的质量为超高质量cap.setRecorder(&video_recorder);//设置保存录制视频的对象timer.setInterval(1000);//定时器每一秒触发超时mm = 0;ss = 0;//视频录制持续时间初始化为0image_path = "C:/Users/chang/Desktop/"; //保存照片的目录video_path = "C:/Users/chang/Desktop/"; //保存视频的目录//connect(&cap,SIGNAL(imageCaptureChanged()),this,SLOT(on_imageCaptureChanged()));//收到拍屏成功的信号之后保存图片到本地//connect(&cap,SIGNAL(screenCaptureChanged()),this,SLOT(on_screenCaptureChanged()));connect(&image_cap,SIGNAL(imageSaved(int,QString)),this,SLOT(on_imageSaved(int,QString)));//收到保存图片成功的信号之后显示到lb_imagecapconnect(&video_recorder,SIGNAL(errorOccured(QMediaRecorder::Error,QString)),this,SLOT(on_errorOccured(QMediaRecorder::Error,QString)));connect(&timer,SIGNAL(timeout()),this,SLOT(on_timeout()));//每秒触发超时,然后更新已录制视频的时间connect(&video_recorder,SIGNAL(recorderStateChanged(QMediaRecorder::RecorderState)),this,SLOT(on_recorderStateChanged(QMediaRecorder::RecorderState)));//根据recorder的实际状态进行相应操作//qDebug() << 0.1;
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pb_display_clicked()//显示lw_cameras当前选择的摄像头画面到QVideoWidget
{for (const QCameraDevice &cameraDevice : cameras) {if(cameraDevice.description() == ui->lw_cameras->currentItem()->text()){cam.setCameraDevice(cameraDevice);cap.setCamera(&cam);}}cam.start();//启动摄像头//cap->camera()->activeChanged(true);//qDebug() << "cap->camera()->cameraDevice().position():" << cap->camera()->isAvailable();//qDebug() << "cap->camera()->cameraDevice().position():" << cap->camera()->cameraDevice().position();if(!cap.camera()->isActive()){// qDebug() << 2;cap.camera()->setActive(1);}
}void MainWindow::on_pb_stopDisplay_clicked()//停止显示摄像头画面到QVideoWidget
{cam.stop();//关闭摄像头
}void MainWindow::on_pb_quit_clicked()//退出软件
{close();
}void MainWindow::on_lw_cameras_itemClicked(QListWidgetItem *item)//单机选中当前项目
{ui->lw_cameras->setCurrentItem(item);
}void MainWindow::on_lw_cameras_itemDoubleClicked(QListWidgetItem *item)//双击直接开启选中摄像头并显示画面
{ui->lw_cameras->setCurrentItem(item);on_pb_display_clicked();
}void MainWindow::on_pb_imagecap_clicked()//拍照
{//cap.imageCapture();QString file_name = image_path + QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzz");qDebug() << file_name;if(image_cap.isReadyForCapture()){image_cap.captureToFile(file_name);}else{ui->lb_imagecap->setText("Image Capture is not for capture");}
}void MainWindow::on_imageSaved(int id, const QString &fileName)
{if(id != -1){ui->lb_imagecap->setText(QString("文件保存成功,文件ID:%1,文件名:%2").arg(id).arg(fileName));}else{ui->lb_imagecap->setText(QString("文件保存失败,文件ID:%1,文件名:%2").arg(id).arg(fileName));}
}void MainWindow::on_pb_videocap_clicked()//开始、停止录像
{if(video_recorder.recorderState() == QMediaRecorder::StoppedState){QString file_dst = video_path + QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzz");video_recorder.setOutputLocation(QUrl::fromLocalFile(file_dst));//QUrl file_dst(video_path + QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzz"));//video_recorder.setOutputLocation(file_dst);qDebug() << QUrl::fromLocalFile(file_dst);video_recorder.record();}else if(video_recorder.recorderState() == QMediaRecorder::RecordingState){video_recorder.stop();}else if(video_recorder.recorderState() == QMediaRecorder::PausedState){//未实现状态}
}void MainWindow::on_errorOccured(QMediaRecorder::Error error, const QString &errorString)
{QMessageBox::critical(this,"错误",QString("errorValue:%1\nerrorString:%2").arg(error).arg(errorString));
}void MainWindow::on_recorderStateChanged(QMediaRecorder::RecorderState state)
{if(state == QMediaRecorder::RecordingState){QString time = QString("%1:%2").arg(mm,2,10,QChar('0')).arg(ss,2,10,QChar('0'));//将每个数字转换为格式:(值,宽度,进制,填充符号)ui->lb_videocap->setText(time);//显示开始录制的时间timer.start();//启动定时器ui->pb_videocap->setText("停止录像");}else if(state == QMediaRecorder::StoppedState){timer.stop();//关闭定时器mm = 0;ss = 0;//录制完后时间清零,为下次录制时间做准备ui->pb_videocap->setText("开始录像");}else if(state == QMediaRecorder::PausedState){//...}
}void MainWindow::on_timeout()//每秒被定时器信号触发,更新已录制的时间
{if(++ss == 60)//秒先加一{ss = 0;mm++;}QString time = QString("%1:%2").arg(mm,2,10,QChar('0')).arg(ss,2,10,QChar('0'));//将每个数字转换为格式:(值,宽度,进制,填充符号)ui->lb_videocap->setText(time);//显示开始录制的时间
}

三、效果展示图

  1. 拍照:
    在这里插入图片描述

  2. 录屏:
    在这里插入图片描述

总结

  1. V1.1版本是对最初版本的功能添加,V1.1和windows系统自带相机软件唯一的区别:windows相机似乎只能使用电脑自带的摄像头,而V1.1可以任意选择所有通过USB连接到电脑上的摄像头;
  2. 该版本录制的视频未实现收音的功能,只有纯画面展示,如有需求可自行研究;
  3. 下一个版本可以考虑将摄像头画面实时推流到远程主机上,并实现由远端用户来选择查看哪个摄像头的画面。

文章转载自:

http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://00000000.Ltxgk.cn
http://www.dtcms.com/wzjs/603935.html

相关文章:

  • 谭谭心怎么建设网站中国十大公司排行榜
  • 网站接入网方式蜜蜂vp加速器七天试用
  • 长沙seo技术培训网站建设和网络优化
  • 网站去掉后缀html萍乡网站制作公司
  • 学网站建设怎么样深圳网站建设网牛天下
  • 二 网站建设的重要性国外建设网站情况报告
  • 成都手机wap网站制作if设计大赛官网
  • 网站建设前台后台设计登录页面html模板
  • 做家具的网站有哪些珠海建站模板源码
  • 上海做网站天锐wordpress白屏
  • 网站规划与建设书网络公司哪家比较好
  • 网站为什么被kwordpress和帝国
  • 兰州市建设工程安全质量监督站网站营销型网站的建设软文
  • 网站建设目标是什么做淘客网站简单吗
  • 个人主页网站wordpress听歌插件
  • 做网站项目怎样建设网站卖农产品
  • 红色风格网站新闻写作网站
  • 做网站的证书推广计划表
  • 做网站 指导厦门人才网个人版
  • 湘潭响塘乡建设局网站中国网库网站介绍
  • 网站开发设计师岗位职责广东网站开发软件
  • 合肥建设集团招聘信息网站诚信网站平台建设方案
  • 建一个网站需要多少费用广州网络公司策划
  • 太原网站运营优化sun0769东莞阳光网
  • 家装效果图网站微信小程序开发制作教程
  • 简约大气网站设计欣赏家居网站建设基本流程
  • 美工素材网站莱芜在线论坛网
  • 富平做网站在线平面设计作图网站
  • 个人网站的制作论文做怎么样的自己的网站
  • 网站建设市场需求分析常见的网站布局结构