OpenCV如何判断一张图片是否有过高的明暗变化

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

前言

判断一张图片是否有过高的明暗变化,可以通过分析图像的亮度分布一致性来实现。一种常见的做法是计算图像的亮度标准差(Standard Deviation)。标准差越大,表示图像中的亮度差异越大,即明暗变化可能较为剧烈。

代码实现

在C++中,你可以直接使用OpenCV库与C++标准库或Boost等数学库结合来计算图像的亮度标准差。虽然OpenCV的cv::Mat类本身不直接提供标准差计算函数,但你可以利用OpenCV的数据结构配合C++ STL中的算法来实现这一功能。以下是一个使用C++和OpenCV计算图像亮度标准差的例子:

#include <iostream>
#include <opencv2/opencv.hpp>
#include <vector>/*** 计算灰度图像的亮度标准差* @param imgGray 输入的灰度图像,必须是单通道的8位无符号整型图像。* @return 返回图像亮度的标准差。* * 该函数接收一个灰度图像作为输入,首先验证图像的类型是否满足要求,* 然后使用OpenCV的meanStdDev函数计算图像亮度的均值和标准差。* 最后,函数返回计算得到的亮度标准差。*/
double calculateBrightnessStdDev( const cv::Mat& imgGray )
{// 确保输入图像为单通道的8位无符号整型灰度图像CV_Assert( imgGray.type() == CV_8UC1 );// 计算图像的均值和标准差cv::Scalar mean, stddev;cv::meanStdDev( imgGray, mean, stddev );// 返回图像亮度的标准差return stddev.val[ 0 ];
}int main( int argc, char** argv )
{// 读取图像并转换为灰度cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/fruit.jpg", cv::IMREAD_GRAYSCALE );if ( img.empty() ){std::cerr << "Could not open or find the image" << std::endl;return -1;}// 计算并打印图像的亮度标准差double stdDev = calculateBrightnessStdDev( img );std::cout << "The standard deviation of brightness in the image fruit is: " << stdDev << std::endl;img    = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/black.jpg", cv::IMREAD_GRAYSCALE );stdDev = calculateBrightnessStdDev( img );std::cout << "The standard deviation of brightness in the image black is: " << stdDev << std::endl;return 0;
}

运行结果

我拿了两张图进行计算,如下:
在这里插入图片描述

在这里插入图片描述

运行结果如下:
在这里插入图片描述
从结果看出第一张的明暗变化度明显大于第二张图像的明暗变化度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费,C++蓝桥杯等级考试真题--第7级(含答案解析和代码)

C蓝桥杯等级考试真题--第7级 答案&#xff1a;D 解析&#xff1a;步骤如下&#xff1a; 首先&#xff0c;--a 操作会使 a 的值减1&#xff0c;因此 a 变为 3。判断 a > b 即 3 > 3&#xff0c;此时表达式为假&#xff0c;因为 --a 后 a 并不大于 b。因此&#xff0c;程…

ESP32-C3模组上跑通NVS(4)

接前一篇文章&#xff1a;ESP32-C3模组上跑通NVS&#xff08;3&#xff09; 本文内容参考&#xff1a; 非易失性存储库 - ESP32 - — ESP-IDF 编程指南 latest 文档 ESP32-C3入门教程 基础篇&#xff08;八、NVS — 非易失性存储库的使用&#xff09;_esp入门教学-CSDN博客 …

STM32 启用指令缓存 HAL_ICACHE_Enable

函数在 STM32 的 HAL&#xff08;硬件抽象层&#xff09;库中通常用于启用指令缓存&#xff08;I-Cache&#xff09;。以下是该函数的主要功能&#xff1a; 启用指令缓存&#xff1a; 当调用 HAL_ICACHE_Enable 函数时&#xff0c;STM32 的 Cortex-M 处理器&#xff08;特别是…

ElementUI的Table组件在无数据情况下让“暂无数据”文本居中显示

::v-deep .el-table__empty-block {width: 100%;min-width: 100%;max-width: 100%; }

如何在npm上发布自己的包

如何在npm上发布自己的包 npm创建自己的包 一、一个简单的创建 1、创建npm账号 官网&#xff1a;https://www.npmjs.com/创建账号入口&#xff1a;https://www.npmjs.com/signup 注意&#xff1a;需要进入邮箱验证 2、创建目录及初始化 $ mkdir ufrontend-test $ cd ufron…

今日科普:了解、预防、控制高血压

高血压&#xff0c;常被称为“隐形的健康威胁”&#xff0c;许多患者可能在毫无预警的情况下发病&#xff0c;且患病率逐年攀升&#xff0c;同时患者群体逐渐年轻化&#xff0c;高血压虽然难以根治&#xff0c;但并不可怕&#xff0c;真正可怕的是血压长期居高不下&#xff0c;…

STM32(七):ADC电位检测 (标准库函数)

前言 上一篇文章已经介绍了如何用STM32单片机中的定时器的PWM波来实现LED的“呼吸”。这篇文章我们来介绍一下如何用STM32单片机中ADC进行电位检测&#xff0c;并发送到XCOM串口中显示。 一、实验原理 1.ADC模数转换的介绍 首先&#xff0c;我们先介绍一下AD模数模块&#…

arcpy批量导出图且图名为shp属性值

1.打开arcmap加载需要导出的图。需求是逐村显示“村界内图斑”并导出为图&#xff0c;在导出每个村时不显示周围的村和“村界内图斑” 2.arcmap上方空白处右键打开“数据驱动页面” 3.在“数据驱动页面”工具条点击第一个图标&#xff0c;打开“设置数据驱动页面” 4.在“设置…

Oracle触发器的用途

0.DDL和DML DDL:data manipulation language,数据操作语言&#xff0c;主要命令有select&#xff0c;update&#xff0c;insert,delete,主要用于对数据库中的数据进行操作 DDL:data definition language,数据定义语言&#xff0c;主要命令有create&#xff0c;alter&#xff…

Spring (40)Spring Cloud和Spring Boot

Spring Boot和Spring Cloud是两个在现代Java应用开发中广泛使用的项目&#xff0c;它们共同构成了创建云原生、微服务架构应用的强大基础。虽然它们紧密协作&#xff0c;但服务于不同的目的。下面&#xff0c;我们将深入探讨它们之间的关系&#xff0c;结合源码和代码示例来进行…

Java1.8全套家政上门服务+springboot+ mysql +Thymeleaf 技术架构开发,家政APP系统在线派单,师傅入驻全套商业源码

Java1.8全套家政上门服务springboot mysql Thymeleaf 技术架构开发&#xff0c;家政APP系统在线派单&#xff0c;师傅入驻全套商业源码 家政预约上门小程序的实用性&#xff1f; 家政预约上门小程序的实用性主要体现在以下几个方面&#xff1a; 一、方便快捷的预约体验&#…

尚硅谷2024新版3小时速通Docker教程

尚硅谷2024新版3小时速通Docker教程 百度网盘&#xff1a;https://pan.baidu.com/s/1SncgHbdJehvZspjcrrbLSw?pwd6c27

【数据结构与算法 经典例题】随机链表的复制(图文详解)

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法 经典例题》C语言 期待您的关注 ​ 目录 一、问题描述 二、解题思路 三、代码实现 1. 原链表中节点的数据拷…

采用JWT令牌和Filter进行登录拦截认证

原理描述&#xff1a; 1、第一次登录的时候&#xff0c;生成JWT令牌&#xff0c;并JWT令牌存放在localStorage。 localStorage.setItem(token, token); 2、每次通过axios发送请求的时候&#xff0c;都将这个令牌获取&#xff0c;并放于header中发送。 也就是JWT令牌只在登录…

PCL 抛物线回归拟合(Quadratic,二维)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里仍然是最小二乘法的应用,其推导过程如下所述: 1.二次函数模型: 其中,a、b 和 c 是需要确定的参数。 2.最小二乘法 假设我们有一组数据点 ( x 1 ​ , y

大数据平台技术选型

大数据平台的技术选型是一个复杂的过程&#xff0c;需要考虑多种因素&#xff0c;如数据量、数据类型、处理速度、成本预算、团队技术能力以及未来扩展性等。以下是大数据平台技术选型的一些关键方面和常用技术&#xff1a; 1. 数据存储 Hadoop HDFS (Hadoop Distributed Fil…

实用软件分享---中医自学宝典(安卓)

专栏介绍:本专栏主要分享一些实用的软件(Po Jie版); 声明1:软件不保证时效性;只能保证在写本文时,该软件是可用的;不保证后续时间该软件能一直正常运行;不保证没有bug;如果软件不可用了,我知道后会第一时间在题目上注明(已失效)。介意者请勿订阅。 声明2:本专栏的…

#03 初探Stable Diffusion:理解其工作原理

文章目录 前言什么是Stable Diffusion?Stable Diffusion的核心组件1. 变分自编码器&#xff08;VAE&#xff09;2. Transformer模型3. 高分辨率图像合成 工作流程示例应用结论 前言 Stable Diffusion已成为AI图像生成领域的一颗新星&#xff0c;其能力在于根据文本提示生成高…

usb设备在主机和VMWare虚拟机中切换连接

操作&#xff1a;点击菜单栏虚拟机(M)>可移动设备>选择自己的usb设备>连接(断开与 主机 的连接)

【Vue】路由介绍

一、引入 思考 单页面应用程序&#xff0c;之所以开发效率高&#xff0c;性能好&#xff0c;用户体验好 最大的原因就是&#xff1a;页面按需更新 比如当点击【发现音乐】和【关注】时&#xff0c;只是更新下面部分内容&#xff0c;对于头部是不更新的 要按需更新&#xff…