用opencv实现像素统计

【欢迎关注编码小哥,学习更多实用的编程方法和技巧】

       在 OpenCV 中,统计图像的像素信息(如像素值分布、最大值、最小值、均值等)是常见的操作。以下是一些常用的方法和函数,用于统计图像的像素信息:


1. 统计像素值的基本信息

  • 最大值、最小值、均值、标准差: 使用 cv::minMaxLoc() 和 cv::meanStdDev() 函数可以快速计算图像的最大值、最小值、均值和标准差。
#include <opencv2/opencv.hpp>
#include <iostream>int main() {cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE); // 读取灰度图像if (image.empty()) {std::cerr << "Error: Could not load image!" << std::endl;return -1;}double minVal, maxVal;cv::Point minLoc, maxLoc;cv::minMaxLoc(image, &minVal, &maxVal, &minLoc, &maxLoc);cv::Scalar mean, stddev;cv::meanStdDev(image, mean, stddev);std::cout << "Min value: " << minVal << " at " << minLoc << std::endl;std::cout << "Max value: " << maxVal << " at " << maxLoc << std::endl;std::cout << "Mean: " << mean[0] << std::endl;std::cout << "Stddev: " << stddev[0] << std::endl;return 0;
}

2. 统计像素值的直方图

  • 直方图计算: 使用 cv::calcHist() 函数可以计算图像的直方图,用于分析像素值的分布。
#include <opencv2/opencv.hpp>
#include <iostream>int main() {cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE); // 读取灰度图像if (image.empty()) {std::cerr << "Error: Could not load image!" << std::endl;return -1;}// 定义直方图参数int histSize = 256; // 直方图的 bin 数量float range[] = {0, 256}; // 像素值范围const float* histRange = {range};bool uniform = true, accumulate = false;cv::Mat hist;cv::calcHist(&image, 1, 0, cv::Mat(), hist, 1, &histSize, &histRange, uniform, accumulate);// 打印直方图for (int i = 0; i < histSize; i++) {std::cout << "Bin " << i << ": " << hist.at<float>(i) << std::endl;}return 0;
}

 

3. 统计像素值的总和

  • 像素值求和: 使用 cv::sum() 函数可以计算图像中所有像素值的总和。
cv::Scalar sum = cv::sum(image);
std::cout << "Sum of pixel values: " << sum[0] << std::endl;

 

4. 统计非零像素的数量

  • 非零像素统计: 使用 cv::countNonZero() 函数可以统计图像中非零像素的数量。
int nonZeroCount = cv::countNonZero(image);
std::cout << "Non-zero pixel count: " << nonZeroCount << std::endl;

 

5. 统计像素值的分布(分通道)

  • 对于多通道图像(如 RGB 图像),可以分别统计每个通道的像素信息。
cv::Mat image = cv::imread("image.jpg", cv::IMREAD_COLOR); // 读取彩色图像
std::vector<cv::Mat> channels;
cv::split(image, channels); // 分离通道for (int i = 0; i < channels.size(); i++) {double minVal, maxVal;cv::minMaxLoc(channels[i], &minVal, &maxVal);std::cout << "Channel " << i << " - Min: " << minVal << ", Max: " << maxVal << std::endl;
}

 

6. 统计像素值的百分比

  • 如果需要统计像素值的百分比(如 95% 的像素值小于某个阈值),可以通过直方图计算累积分布函数(CDF )来实现。
cv::Mat hist;
cv::calcHist(&image, 1, 0, cv::Mat(), hist, 1, &histSize, &histRange, uniform, accumulate);// 计算累积分布函数
for (int i = 1; i < histSize; i++) {hist.at<float>(i) += hist.at<float>(i - 1);
}// 归一化
hist /= image.total();// 查找 95% 的像素值阈值
float threshold = 0.95;
int pixelValueThreshold = 0;
for (int i = 0; i < histSize; i++) {if (hist.at<float>(i) >= threshold) {pixelValueThreshold = i;break;}
}
std::cout << "95% of pixel values are below: " << pixelValueThreshold << std::endl;

       通过以上方法,可以有效地统计和分析 OpenCV 图像的像素信息。这些统计信息对于图像处理、分析和特征提取等任务非常重要。根据具体需求,可以选择合适的方法进行像素统计。 

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

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

相关文章

Qt 5.14.2 学习记录 —— 일 新项目

文章目录 1、创建2、查看代码 ---- main.cpp3、查看代码 ---- widgt.h4、查看代码 ---- widgt.cpp和widget.ui5、查看代码 ---- Empty.pro6、运行产生的中间文件 1、创建 左上角的文件&#xff0c;新建文件或项目。如果要写一个GUI程序&#xff0c;应当选择Application&#x…

vscode如何离线安装插件

在没有网络的时候,如果要安装插件,就会麻烦一些,需要通过离线安装的方式进行。下面记录如何在vscode离线安装插件。 一、下载离线插件 在一台能联网的电脑中,下载好离线插件,拷贝到无法联网的电脑上。等待安装。 vscode插件商店地址:https://marketplace.visualstudio.co…

数据仓库中的指标体系模型介绍

数据仓库中的指标体系介绍 文章目录 数据仓库中的指标体系介绍前言什么是指标体系指标体系设计有哪些模型?1. 指标分层模型2. 维度模型3. 指标树模型4. KPI&#xff08;关键绩效指标&#xff09;模型5. 主题域模型6.平衡计分卡&#xff08;BSC&#xff09;模型7.数据指标框架模…

2025元旦源码免费送

我们常常在当下感到时间慢&#xff0c;觉得未来遥远&#xff0c;但一旦回头看&#xff0c;时间已经悄然流逝。对于未来&#xff0c;尽管如此&#xff0c;也应该保持一种从容的态度&#xff0c;相信未来仍有许多可能性等待着我们。 免费获取源码。 更多内容敬请期待。如有需要可…

2025年Stable Diffusion安装教程(超详细)

StableDiffusion的安装部署其实并不困难&#xff0c;只需简单点击几下&#xff0c;几分钟就能安装好&#xff0c;不管是windows还是苹果mac电脑&#xff0c;关于StableDiffusion的各种安装方式&#xff0c;这片文章一一来给大家讲明白。&#xff08;所有安装资料都给大家整理好…

【openwrt】OpenWrt 路由器的 802.1X 动态 VLAN

参考链接 [OpenWrt Wiki] Wi-Fi /etc/config/wirelesshttps://openwrt.org/docs/guide-user/network/wifi/basic#wpa_enterprise_access_point 介绍 基于802.1X 无线网络身份验证࿰

Android12 App窗口创建流程

有关的窗口对象 PhoneWindowActivityThread#performLaunchActivity {Activity.attach}Surface new ViewRootImpl 创建null对象 mSurface.transferFrom(getOrCreateBLASTSurface())//填充内容 LayerSurfaceFlinger::createLayerSurfaceControlViewRootImpl#relayoutWindow{mSur…

Leetcode打卡:设计一个ATM机器

执行结果&#xff1a;通过 题目 2241 设计一个ATM机器 一个 ATM 机器&#xff0c;存有 5 种面值的钞票&#xff1a;20 &#xff0c;50 &#xff0c;100 &#xff0c;200 和 500 美元。初始时&#xff0c;ATM 机是空的。用户可以用它存或者取任意数目的钱。 取款时&#xff0c…

在CodeBlocks搭建SDL2工程构建TFT彩屏模拟器虚拟TFT彩屏幕显示

在CodeBlocks搭建SDL2工程构建TFT彩屏模拟器虚拟TFT彩屏幕显示 参考文章源码下载地址一、SDL2的创建、初始化、退出二、系统基本Tick、彩屏刷新、按键事件三、彩屏获取与设置颜色四、彩屏填充颜色及清屏五、彩屏显示中文和英文字符串六、彩屏显示数字七、彩屏初始化八、主函数测…

ESP8266+STM32+阿里云保姆级教程(AT指令+MQTT)

前言&#xff1a;在开发过程中&#xff0c;几乎踩便了所有大坑小坑总结出的文章&#xff0c;我是把坑踩满了&#xff0c;帮助更过小白快速上手&#xff0c;如有错误之处&#xff0c;还麻烦各位大佬帮忙指正、 目录 一、ESP-01s介绍 1、ESP-01s管脚功能&#xff1a; 模组启动模…

美的空气净化器好用吗?拾梧、美的、戴森空气净化器除烟哪个好?

说到二手烟&#xff0c;这可真是个让人头疼的问题&#xff01;它里面含有超过7000种化学物质&#xff0c;形式多样&#xff0c;处理起来比甲醛这些传统污染物难多了。在市场上那么多空气净化器里&#xff0c;要挑一个能真正对付二手烟的&#xff0c;简直就像大海捞针一样难。不…

【机器学习】穷理至极,观微知著:微积分的哲思之旅与算法之道

文章目录 微积分基础&#xff1a;理解变化与累积的数学前言一、多重积分的高级应用1.1 高维概率分布的期望值计算1.1.1 多维期望值的定义1.1.2 Python代码实现1.1.3 运行结果1.1.4 结果解读 1.2 特征空间的体积计算1.2.1 单位球体的体积计算1.2.2 Python代码实现1.2.3 运行结果…

Ae:合成设置 - 3D 渲染器

Ae菜单&#xff1a;合成/合成设置 Composition/Composition Settings 快捷键&#xff1a;Ctrl K After Effects “合成设置”对话框中的3D 渲染器 3D Renderer选项卡用于选择和配置合成的 3D 渲染器类型&#xff0c;所选渲染器决定了合成中的 3D 图层可以使用的功能&#xff0…

Zookeeper是如何解决脑裂问题的?

大家好&#xff0c;我是锋哥。今天分享关于【Zookeeper是如何解决脑裂问题的?】面试题。希望对大家有帮助&#xff1b; Zookeeper是如何解决脑裂问题的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper 通过一系列的机制来防止和解决脑裂&#xff08;sp…

【python因果库实战15】因果生存分析4

这里写目录标题 加权标准化生存分析总结个体层面的生存曲线 加权标准化生存分析 我们还可以将加权与标准化结合起来&#xff0c;使用 WeightedStandardizedSurvival 模块。在这里&#xff0c;我们将逆倾向得分加权模型&#xff08;根据基线协变量重新加权人群&#xff09;与加…

windows中硬件加速gpu计划开启cpu的使用率居高不下

1.加速gpu计划开启在任务管理器的gpu选项中看不到cuda选项&#xff0c;这给我们进行深度学习训练和推理带来很大影响。 2.开启硬件加速CPU的占用率明显增高&#xff0c;特别用GPU进行实时视频流解码时就不会分配给GPU解码&#xff0c;造成cpu占用居高不下。不利于深度学习训练…

OpenGL入门最后一章观察矩阵(照相机)

前面的一篇文章笔者向大家介绍了模型变化矩阵&#xff0c;投影矩阵。现在只剩下最后一个观察矩阵没有和大家讲了。此片文章就为大家介绍OpenGL入门篇的最后一个内容。 观察矩阵 前面的篇章当中&#xff0c;我们看到了即使没有观察矩阵&#xff0c;我们也能对绘制出来的模型有一…

java.lang.Error: FFmpegKit failed to start on brand:

如果你使用FFmpegKit的时候遇到了这个问题&#xff1a; java.lang.Error: FFmpegKit failed to start on brand: Xiaomi, model: MI 8, device: dipper, api level: 29, abis: arm64-v8a armeabi-v7a armeabi, 32bit abis: armeabi-v7a armeabi, 64bit abis: arm64-v8a.at c…

KAGGLE竞赛实战2-捷信金融违约预测竞赛-part1-数据探索及baseline建立

竞赛链接&#xff1a;https://www.kaggle.com/competitions/home-credit-default-risk/ 认识数据集&#xff1a;application的两张表是申请人信息 通过id关联bureau&#xff1a;过去的借款、previous_application两张表 而bureau_balance则代表对应的还款信息 表之间的关系…

【软考网工笔记】计算机基础理论与安全——网络安全

病毒 Melissa 宏病毒 1. 是一种快速传播的能够感染那些使用MS Word 97 和MS Office 2000 的计算机宏病毒。 2. 前面有**Macro** 表示这是宏病毒&#xff1b; 3. 宏病毒可以感染后缀为.xls的文件&#xff1b;Worm 蠕虫病毒 1. 通常是通过网络或者系统漏洞进行传播。 2. 利用信…