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

OpenCV 图像像素值统计

一、知识点
1、像素值统计
  (1)、最小(min)
  (2)、最大(max)
  (3)、均值(mean)
  (4)、标准差(standard deviation)
      方差是一组数据与其平均值之差的平方的平均值。
      标准差是方差的平方根。
      它们衡量了数据的离散程度。 值越大,数据点之间的差异越大,集中趋势差; 反之,数据分布越集中。
  
2、void minMaxLoc(InputArray src, CV_OUT double * minVal, CV_OUT double * maxVal = 0, CV_OUT Point * minLoc = 0, CV_OUT Point * maxLoc = 0, InputArray mask = noArray());
  (1)、查找数组(图像)中的最小值和最大值,以及它们的位置。
  (2)、参数说明:
      src: 输入数组(图像),需要单通道的。
      minVal: 输出参数,指向最小值的指针,若不需要,则置NULL。
      maxVal: 输出参数,指向最大值的指针,若不需要,则置NULL。
      minLoc: 输出参数,指向最小值位置(x, y坐标)的指针,若不需要,则置NULL。
      maxLoc: 输出参数,指向最大值位置(x, y坐标)的指针,若不需要,则置NULL。
      mask: 可选掩码,若不为空,则在指定数组中(非零掩码对应)搜索最小最大值; 若为空,则在整个数组中搜索。
      
3、void meanStdDev(InputArray src, OutputArray mean, OutputArray stddev, InputArray mask = noArray());
  (1)、计算数组(图像)的均值和标准差。
  (2)、参数说明:
      src: 输入数组(图像),可以是单通道,也可以是多通道。
      mean: 输出数组,用于存储每个通道的均值。
      stddev: 输出数组,用于存储每个通道的标准差值。
      mask: 可选掩码,若不为空,则在指定数组中(非零掩码对应)计算; 若为空,则在整个数组中计算。
  
  
二、示例代码

#include <iostream>
#include <opencv2/opencv.hpp>int main()
{cv::Mat src1 = cv::imread("../images/6.png");if (src1.empty()){std::cout << "load src image error..." << std::endl;return -1;}//求最小最大值时,输入图像需是单通道的std::vector<cv::Mat> vecM;cv::split(src1, vecM);for (int i = 0; i < vecM.size(); i++){double minV, maxV;cv::Point minLoc, maxLoc;cv::minMaxLoc(vecM[i], &minV, &maxV, &minLoc, &maxLoc, cv::Mat());std::cout << "Image1 i = " << i << ", minValue = " << minV << ", maxValue = " << maxV << std::endl;}//求均值和方差cv::Mat mean, stddev;cv::meanStdDev(src1, mean, stddev);std::cout << "mean:" << std::endl << mean << std::endl << "stddev:" << std::endl << stddev << std::endl;cv::Mat src2 = cv::Mat::zeros(4, 3, CV_8UC3);src2 = cv::Scalar(42, 89, 105);//求最小最大值std::vector<cv::Mat> vecM2;cv::split(src2, vecM2);for (int i = 0; i < vecM2.size(); i++){double minV, maxV;cv::Point minLoc, maxLoc;cv::minMaxLoc(vecM2[i], &minV, &maxV, &minLoc, &maxLoc, cv::Mat());std::cout << "Image2 i = " << i << ", minValue = " << minV << ", maxValue = " << maxV << std::endl;}//求均值和方差cv::Mat mean2, stddev2;cv::meanStdDev(src2, mean2, stddev2);std::cout << "mean2:" << std::endl << mean2 << std::endl << "stddev2:" << std::endl << stddev2 << std::endl;system("pause");return 0;
}

输出结果:
Image1 i = 0, minValue = 0, maxValue = 255
Image1 i = 1, minValue = 0, maxValue = 255
Image1 i = 2, minValue = 0, maxValue = 255
mean:
[117.4247741699219;
 99.5269775390625;
 103.0511779785156]
stddev:
[109.9909118460736;
 99.60692477866574;
 111.1995801429959]
Image2 i = 0, minValue = 42, maxValue = 42
Image2 i = 1, minValue = 89, maxValue = 89
Image2 i = 2, minValue = 105, maxValue = 105
mean2:
[42;
 89;
 105]
stddev2:
[0;
 0;
 0]
  

http://www.xdnf.cn/news/964027.html

相关文章:

  • Python入门手册:常用的Python标准库
  • C++初阶-list的模拟实现(难度较高)
  • C++学习-入门到精通【17】自定义的模板化数据结构
  • ParcelJS:零配置极速前端构建工具全解析
  • React 中的TypeScript开发范式
  • 存储设备应用指导
  • C++ 手写实现 unordered_map 和 unordered_set:深入解析与源码实战
  • 光伏功率预测 | BP神经网络多变量单步光伏功率预测(Matlab完整源码和数据)
  • word嵌入图片显示不全-error记
  • 高考志愿填报,如何查询高校历年录取分数线?
  • Vue 2.0 + C# + OnlyOffice 开发
  • Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
  • K8S容器介绍
  • ubuntu24安装cuda12.6+cudnn9.6
  • 国产具身大模型首入汽车工厂,全场景验证开启工业智能新阶段
  • Vue3 watch使用
  • 路由器欧盟EN 18031网络安全认证详细解读
  • Css实现悬浮对角线边框动效
  • 【Trace32专栏】使用trace32 定位分析log_buf问题
  • 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
  • ESP8266自动浇水系统
  • 边缘计算医疗风险自查APP开发方案
  • i++与++i的区别
  • 光影魔术手 4.7.1 | 经典照片美化软件
  • Java八股文——JVM「类加载篇」
  • 论文分类打榜赛Baseline(2):InternLM昇腾硬件微调实践
  • React---day12
  • 【QT】自动更新库QSimpleUpdater使用实例封装
  • golang学习随便记x[2,3]-字符串处理与正则表达式
  • 基于Java项目的Karate UI测试