opencv实现像素统计的示例代码

news/2025/1/16 16:34:29/文章来源:https://www.cnblogs.com/Ryan9399/p/18675247

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

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

    最大值、最小值、均值、标准差: 使用 cv::minMaxLoc() 和 cv::meanStdDev() 函数可以快速计算图像的最大值、最小值、均值和标准差。

    include <opencv2/opencv.hpp>

    include

    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

    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::vectorcv::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.hqwc.cn/news/870183.html

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

相关文章

介绍5种从resources获取inputStream的方法

@Component @Slf4j public class TestFileService {@Autowiredprivate ResourceLoader resourceLoader;@PostConstructpublic void testInputStream() throws IOException {// 5种从resources获取inputStream的方法// 在大多数情况下,推荐使用ResourceLoader或ClassPathResour…

开发一个篮球共享计分器小程序

篮球共享计分器,实现多人实时共享记录比赛,提供个人/团队数据和表现的统计数据,提供单机版/共享版/私密版三种模式记录比赛,提供精简/精准版模式选择,保存历史比赛数据,可用于文字直播。序言作为一名篮球爱好者的程序员,在使用目前市面篮球计分器时,总觉得用的不顺手,…

飞机电气系统技术分析:数字样机技术引领创新

现代飞机正向着更安全、环保和经济的方向发展,飞机系统的设计日益复杂,对各子系统的性能和可靠性也提出了更高要求。作为飞机的重要组成部分,电气系统(Electrical System,ES)不仅负责为各类机载设备提供稳定的电力支持,还在飞行控制、导航、通讯以及乘客舒适性等方面发挥…

Go操作MongoDB

NoSQL泛指非关系型数据库,如mongo,redis,HBase。 mongo使用高效的二进制数据存储,文件存储格式为 BSON ( 一种json的扩展,比json性能更好,功能更强大)。 MySQL中表的概念在mongo里叫集合(collection), MySQL中行的概念在mongo中叫文档(document),一个文档看上去像一个j…

2025年实战技巧!如何通过项目管理助力产品经理实现产品目标?

在当今竞争激烈的商业环境中,产品经理不仅要负责产品的整体规划和设计,还需要确保项目能够按时、按质、按预算完成。这就需要产品经理具备出色的项目管理能力。本文将深入探讨如何通过项目管理助力产品经理实现产品目标,并提供2025年的实战技巧。引言 随着市场的不断变化和技…

Polygon-funky

E. Polygon 给定一个数 n,生成一个 nn 的一个全为 0 的初始矩阵,矩阵上方和左方均有一排炮台,矩阵的下边和右边是边界 炮台可以发射子弹,子弹只能直线行走,且遇到边界后会停止,遇到一个停止的子弹也会停止,子弹停止后的坐标里面的值记为 1 在任何时候,都不会有超过一门…

2025四款简单好用的电脑便签提醒软件推荐

进入2025年,越来越多的打工人需要在电脑上使用一款桌面便签或日程提醒软件,随时记录和管理工作事项,能够帮助我们高效整理思绪,确保重要事务不被遗漏。 今天给大家介绍四款简单又好用的电脑便签或日程提醒软件,总有一款是适合你的! 一、Win系统便笺 Windows操作系统自带的…

本次小论文minor revision中的知识积累

可以发邮件向编辑申请延期返修截止日期 https://cn.service.elsevier.com/app/answers/detail/a_id/29653/c/10595/supporthub/publishing/role/作者/ https://zhuanlan.zhihu.com/p/577324425申请邮件模板:如何在Editorial Manager系统中提交修改稿?【爱思唯尔Editorial Man…

多通道传感器接入集中控制频率温度 传感器集线器带来更多方便

多通道传感器接入集中控制频率温度 传感器集线器带来更多方便现场传感器太多,编号容易混乱?传感器集线器可以将多路传感器轮流切换到单一接口,为现场提供更多方便。操作简便直观,使用一个百位拨动开关和两个旋转开关(十位和个位)自由切换到任意传感器。 传感器通道多,最…

实战指南:优化采购流程,实现高效采购管理

优化采购流程需要从多个方面入手,包括明确采购需求、加强供商管理、优化采购谈判与合同签订、加强采购执行与跟踪、提高质量控制与验收水平、进行成本分析与优化、加强人员培训与发展以及注重合规与风险管理。通过这些措施的实施,可以显著提高采购效率和质量,降低采购成本,…

Lableview 标签软件 | LABELVIEW 条形码标签软件

Lableview 标签软件 | LABELVIEW 条形码标签软件Lableview 专业顾问 手机|微信:13928851814值得您信赖的条形码标签软件稳健可靠的条形码标签创建与集成简单的数据库连接易于使用的界面和提供便利的向导100 多种条形码符号体系可自定义的打印界面变量选用表增加了灵活性LABE…

原生JS实现一个日期选择器(DatePicker)组件

这是通过原生HTML/CSS/JavaScript完成一个日期选择器(datepicker)组件,一个纯手搓的组件的开发。主要包括datepicker静态结构的编写、日历数据的计划获取、组件的渲染以及组件事件的处理。 根据调用时的时间格式参数,可以控制短日期格式或长日期格式。实现效果(短日期格式…