- 操作系统: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