QT 获取视频帧Opencv获取清晰度
先展示结果:

1.获取摄像头的分辨率
mResSize.clear();mResSize = camera_->supportedViewfinderResolutions();ui->comboBox_resulation->clear();int i=0;foreach (QSize msize, mResSize) {qDebug()<<msize;ui->comboBox_resulation->addItem(QString::number(msize.width(),10)+"*"+QString::number(msize.height(),10), i++);} //摄像头支持分辨率打印
2. 拍照
2.1 保存图片
void MainWindow::processCapturedImage(int request_id, const QImage &img)
{i++;isDirExist("D://capture");img_name = "D://capture//" +QString::number(i) +".png";//qDebug() << "img_name :" << QString::fromStdString(img_name);qDebug() << "img_name :" << img_name;img.save(img_name);
}
2.2 判断目录是否存在
bool MainWindow::isDirExist(QString fullPath)
{QDir dir(fullPath);if(dir.exists()){return true;}else{bool ok = dir.mkpath(fullPath);//创建多级目录qDebug() << "success create";return ok;}
}
3.获取4个角上的亮度与中间亮度
cv ::Mat image= surface_->matimage(); //从视频帧获取每一帧图片cvtColor(image, image, CV_RGBA2GRAY);cv::Mat img_1,img_2,img_3,img_4,img_center;//cout << " image ::" << image.size() << endl;int widgh = image.cols;int height = image.rows;qDebug() << "weight = " << widgh << " height = "<< height;cv::Rect rec_1(0,0,100,100);cv::Rect rec_2(0,height-100,100,100);cv::Rect rec_3(widgh-100,0,100,100);cv::Rect rec_4(height-100,height-100,100,100);cv::Rect rec_center(height/2-50,widgh/2-50,100,100);img_1 = image(rec_1);cv::Scalar graysca_1 = mean(img_1);float graylight_1 = graysca_1.val[0];qDebug() << "左上 == " << graylight_1 << endl;QString str_1 = QString::number(graylight_1,'f',2);str_1 = tr("%1").arg(str_1);//qDebug() << "str_1 == " << QString::fromStdWString(str_1) ;//ui->label_leftup->setText(str_1);img_2 = image(rec_2);cv::Scalar graysca_2 = mean(img_2);float graylight_2 = graysca_2.val[0];qDebug() << "左下 == " << graylight_2 << endl;QString str_2 = QString::number(graylight_2,'f',2);str_2 = tr("%1").arg(str_2);// qDebug() << "str_2 == " << QString::fromStdWString(str_2) ;// ui->label_leftdown->setText(str_2);img_3 = image(rec_3);cv::Scalar graysca_3 = mean(img_3);float graylight_3 = graysca_3.val[0];qDebug() << "右上 == " << graylight_3 << endl;QString str_3 = QString::number(graylight_3,'f',2);str_3 = tr("%1").arg(str_3);//qDebug() << "str_3 == " << QString::fromStdWString(str_3) ;//ui->label_rightup->setText(str_3);img_4 = image(rec_4);cv::Scalar graysca_4 = mean(img_4);float graylight_4 = graysca_4.val[0];qDebug() << "右下 == " << graylight_4 << endl;QString str_4 = QString::number(graylight_4,'f',2);str_4 = tr("%1").arg(str_4);//qDebug() << "str_4 == " << QString::fromStdWString(str_4) ;//ui->label_rightdown->setText(str_4);img_center = image(rec_center);cv::Scalar graysca_center = mean(img_center);float graylight_center = graysca_center.val[0];qDebug() << "中间 == " << graylight_center << endl;QString str_center = QString::number(graylight_center,'f',2);str_center = tr("%1").arg(str_center);
4. 清晰度
image = QImage2cvMat(img); //Qimage 转换成cv::MatcvtColor(image, image, CV_BGR2RGB);Laplacian(image, imageSobel, CV_16U);//Sobel(image, imageSobel, CV_16U, 1, 1);//图像的平均灰度meanValue = cv::mean(imageSobel)[0];meanValue = QString::number(meanValue,'f',1).toDouble();//qDebug()<<"meanValue == " << meanValue ;
5. 重新开启摄像头
void MainWindow::on_pushButton_open_clicked()
{camera_ = new QCamera;surface_ = new MyVideoSurface(this);camera_->setViewfinder(surface_);image_capture = new QCameraImageCapture(camera_);connect(image_capture, SIGNAL(imageCaptured(int, QImage)), this, SLOT(processCapturedImage(int, QImage)));connect(surface_,&MyVideoSurface::sendsharpness,this,&MainWindow::updatesharpness);connect(ui->pushButton_pic,&QPushButton::clicked,this,&MainWindow::pushButton_pic_click);//connect(ui->pushButton_getlight,&QPushButton::clicked,this,&MainWindow::pushButton_pic_click);connect(ui->pushButton_getlight,&QPushButton::clicked,this,&MainWindow::pushButton_getlight_clicked);camera_->start();SetFrameResolution();
}
6. 获取某一点的RGB值
QColor clrCurrent( img.pixelColor( 50, 175 ) );qDebug() << "00 red == " << clrCurrent.red() << "green == "<< clrCurrent.green() << " blue == " << clrCurrent.blue();
7. 每一帧的摄像头数据
bool MyVideoSurface::present(const QVideoFrame &frame) //每一帧摄像头的数据,都会经过这里
{if (surfaceFormat().pixelFormat() != frame.pixelFormat() || surfaceFormat().frameSize() != frame.size()) {setError(IncorrectFormatError);stop();return false;}currentFrame_ = frame; //获取每一帧数据widget_->repaint(targetRect_);return true;
}
源码:QT摄像头获取每一帧图像数据以及opencv获取清晰度资源-CSDN文库
相关文章:
QT 获取视频帧Opencv获取清晰度
先展示结果: 1.获取摄像头的分辨率 mResSize.clear();mResSize camera_->supportedViewfinderResolutions();ui->comboBox_resulation->clear();int i0;foreach (QSize msize, mResSize) {qDebug()<<msize;ui->comboBox_resulation->addItem(…...
生成式AI如何辅助医药行业智能营销
生成式AI在医药行业的智能营销中发挥着日益重要的作用,它通过多种方式辅助医药企业提升市场洞察能力、优化营销策略、增强客户互动和体验,从而推动销售增长和品牌价值的提升。以下是生成式AI如何辅助医药行业智能营销的具体方式:一、精准市场…...
演示:基于WPF的DrawingVisual开发的Chart图表和表格绘制
一、目的:基于WPF的DrawingVisual开发的Chart图表和表格绘制 二、预览 钻井井轨迹表格数据演示示例(应用Table布局,模拟井轨迹深度的绘制) 饼图表格数据演示示例(应用Table布局,模拟多个饼状图组合显示&am…...
汽车保养BBBBBBBBBBB
小保养就是机油和机滤,4s店比较贵,可以在京东上买机油,可以包安装 极护、磁护 两款机油配方不同,极护系列机油注入液钛配方,拥有特别的油膜自适应能力,在各种形式条件下均能有效减少金属间的直接接触&…...
H3C R4900 G3服务器上配置本地磁盘RAID
首先web登录HDM后,查看本地磁盘 开机后在如下界面中按F10 等待后如下截图:单击“系统安装” 如下截图。默认选择,单击“下一步” 如下RAID配置,选中2个同样大的磁盘,单击“创建” 在跳出界面中,配置为RAID 1,输入需要的...
HBase DDL操作代码汇总(namespace+table CRUD操作)
HBase DDL操作 DDL操作主要是关于命名空间和表格的内容增删改查。 注:如果出现无法连接到zookeeper等的相关错误,可以将以下代码打jar包,在HMaster节点上执行 错误提示: Exception in thread “main” java.net.SocketTimeoutExc…...
关于TCP的基础知识
关于TCP的基础知识 TCP 是 Transmission Control Protocol 的缩写,中文意思是传输控制协议。 TCP 是一种面向连接的、可靠的、基于字节流的传输层通信协议,它位于 OSI 模型的第四层(传输层)。TCP 协议通过建立连接、维护连接状态、…...
MyBatis 中的类型别名配置详解
目录 1. 什么是类型别名? 2. 类型别名的配置方法 2.1 使用单个标签 2.2 使用标签批量扫描 2.3 使用Alias注解 3. 注意事项 4. 相关知识拓展 4.1 MyBatis的映射文件 4.2 MyBatis的动态SQL 4.3 MyBatis与Spring的整合 4.4 性能优化 5. 结论 在现代Java开发…...
如何提高UI自动化的稳定性
用例层面: 1. 将用例设计成参数化,将测试数据通过参数进行传递 2. 对于一些可能会变化的参数,将其设计成全局变量,减少维护用例的成本 3. 对用例之间避免产生依赖,可以独立执行 框架层面: 1. 使用PO设…...
ubuntu如何开启和关闭图形界面
在Ubuntu中,你可以根据需要开启或关闭图形界面。以下是具体的方法: 关闭图形界面 方法一:使用 systemctl 命令 打开终端。输入以下命令切换到多用户目标(相当于关闭图形界面):sudo systemctl set-defaul…...
从博客到ICT社区:深化学习与交流的桥梁
大家好,我是你们熟悉的云途-CloudJourney。在这个信息爆炸的时代,我一直致力于通过博客、公众号等平台,与大家分享关于Linux、K8S、Docker、网络、服务器以及OpenStack等前沿技术的见解与心得。然而,随着交流的深入,我…...
基于python+django+vue的旅游景点数据分析系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…...
C++简单缓冲区类设计
目录 1.引言 2.静态缓冲区 3.动态缓冲区 4.数据引用类 5.自动数据引用类 6.几种缓冲区的类关系图 7.注意事项 8.完整代码 1.引言 在C中,设计静态和动态缓冲区类时,需要考虑的主要差异在于内存管理的方式。静态缓冲区类通常使用固定大小的内存区域…...
MySQL 数据库
1. MySQL 数据库的基础知识 这一部分将带你了解 MySQL 数据库的核心概念。无论你是初学者还是想要巩固基础,这部分内容将帮助你打下扎实的基础。 数据库的定义与作用:什么是数据库?MySQL 与其他数据库系统的比较。MySQL 安装与配置…...
基于单片机的智能校园照明系统
由于校园用电量较大,本设计可以根据实际环境情况的改变,实现实时照明的控制。本设计以单片机芯片为控制芯片,热释电传感器采集教室中学生出入的信息,并把信息传递给单片机芯片,单片机芯片根据传感器传递过来的信息来控…...
高性能分布式搜索引擎Elasticsearch详解
♥️作者:小宋1021 🤵♂️个人主页:小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!! 🎈🎈加油! 加油!…...
连锁收银系统的五大功能 选择开源收银系统三要素
连锁收银系统的五大功能,很多新手是不清楚的,老手也只是知道一些大概,今天,商淘云为大家分享收银系统的五大功能,尤其是第五个,大部分人不清楚,有的企业前面选了不合适的收银系统,导…...
虚幻引擎解决构建问题
1.Intermediate 文件夹 在 Unreal Engine中,Intermediate 文件夹扮演着构建过程中的临时存储角色。具体来说,Intermediate 文件夹用于存放在编译和构建项目过程中生成的中间文件,这些文件包括但不限于: 编译中间文件:…...
C++基础知识:C++中读文件的四种简单方式
1.读取文件的步骤: 读文件步骤如下: 1.包含头文件 #include <fstream> 2.创建流对象 ifstream ifs; 3.打开文件并判断文件是否打开成功 ifs.open(“文件路径”,打开方式); 4. 读数据 四种方式读取 5.关闭文件 ifs.close(); 读取方法一: #include…...
【人工智能】多模态AI:如何通过融合文本、图像与音频重塑智能系统未来
1. 引言 在人工智能领域,多模态AI 是一项令人兴奋的新兴技术,旨在通过结合文本、图像和音频等多种数据模态,打造更加智能化和人性化的系统。随着深度学习和自然语言处理(NLP)的飞速发展,多模态AI正在为下一…...
从纹波和EMI出发:实战分析DC-DC降压电路中PWM与PFM的取舍与优化技巧
从纹波和EMI出发:实战分析DC-DC降压电路中PWM与PFM的取舍与优化技巧 在射频模块或高精度ADC供电设计中,电源的纯净度直接决定系统性能上限。当输出电压纹波超出ADC的LSB范围,或EMI噪声耦合到敏感信号链时,工程师往往需要重新审视D…...
终极指南:3步掌握yfinance金融数据获取与智能修复实战
终极指南:3步掌握yfinance金融数据获取与智能修复实战 【免费下载链接】yfinance Download market data from Yahoo! Finances API 项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance yfinance是一个强大的Python库,能够从Yahoo! Finan…...
Vim-ai插件深度指南:在Vim中无缝集成AI提升开发效率
1. 项目概述:当Vim遇上AI,一场编辑器生产力的革命如果你和我一样,是个在终端里泡了十多年的老Vim用户,那你一定经历过这样的场景:面对一个复杂的函数重构,手指在键盘上飞舞,:s、%s、宏录制轮番上…...
Go语言实现Hermes引擎:高性能JavaScript字节码虚拟机解析与实践
1. 项目概述:一个Go语言实现的Hermes引擎最近在折腾一些需要高性能模板渲染的后端服务,偶然间在GitHub上发现了LAI-755/hermes-go这个项目。简单来说,这是一个用纯Go语言实现的Hermes引擎。如果你对前端生态熟悉,可能听说过Hermes…...
AI项目脚手架:标准化与自动化提升工程效率
1. 项目概述:一个为AI项目量身定制的“脚手架”如果你和我一样,在AI领域摸爬滚打多年,从早期的机器学习模型到现在的深度学习、大语言模型应用,肯定经历过无数次从零开始搭建项目的“阵痛”。每次新建一个项目,都要重复…...
faah:轻量级自动化任务编排器,简化运维与数据处理工作流
1. 项目概述:一个被低估的自动化利器最近在整理自己的自动化工具链时,又翻出了kiron0/faah这个项目。说实话,第一次看到这个仓库名,我也有点懵——“faah”?这名字听起来不像是一个典型的工具。但点进去之后࿰…...
MacOS光标增强工具:命令行驱动,实现自动化与个性化配置
1. 项目概述:当光标成为生产力工具如果你是一名长期在macOS上工作的开发者、设计师或者文字工作者,你肯定对系统自带的光标功能又爱又恨。爱的是它简洁流畅,恨的是它在某些高强度、多任务场景下显得力不从心。比如,当你需要在多个…...
开源UI组件库深度解析:从设计系统到工程实践
1. 项目概述:一个开源UI组件库的诞生与价值如果你是一名前端开发者,或者正在负责一个需要快速搭建现代化界面的项目,那么你大概率听说过或者用过一些知名的UI组件库。今天我想深入聊聊一个在GitHub上拥有超过1.5万星标,被许多开发…...
基于SpringBoot的公司固定资产盘点系统毕设源码
博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在构建一个基于Spring Boot框架的公司固定资产盘点系统以解决传统资产管理方式中存在的效率低下问题。当前企业固定资产管理工作普遍面临数据采集繁琐、…...
005 DevEco Studio OHPM同步404报错 解决文档
[cs]005 DevEco Studio OHPM同步404报错 解决文档 文档简介 本文解决鸿蒙开发中新建空白项目自动触发ohpm install时报错:ohos/hypium、ohos/hamock包404找不到、拉取依赖失败问题。 核心原则:不修改项目任何自带文件、不删除系统生成依赖、不改动业务代…...
