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

2025-01-06 15:50

本文主要是介绍opencv实现像素统计的示例代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《opencv实现像素统计的示例代码》本文介绍了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:BiMqrF: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 histSpythonize = 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] << swww.chinasem.cntd::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) {
        pixelValueThrjseshold = i;
        break;
    }
}
std::cout << "95% of pixel values are below: " << pixelValueThreshold << std::endl;

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

到此这篇关于opencv实现像素统计的示例代码的文章就介绍到这了,更多相关opencv 像素统计内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于opencv实现像素统计的示例代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1152943

相关文章

轻松掌握python的dataclass让你的代码更简洁优雅

《轻松掌握python的dataclass让你的代码更简洁优雅》本文总结了几个我在使用Python的dataclass时常用的技巧,dataclass装饰器可以帮助我们简化数据类的定义过程,包括设置默... 目录1. 传统的类定义方式2. dataclass装饰器定义类2.1. 默认值2.2. 隐藏敏感信息

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.

Python使用asyncio实现异步操作的示例

《Python使用asyncio实现异步操作的示例》本文主要介绍了Python使用asyncio实现异步操作的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录1. 基础概念2. 实现异步 I/O 的步骤2.1 定义异步函数2.2 使用 await 等待异

Django中使用SMTP实现邮件发送功能

《Django中使用SMTP实现邮件发送功能》在Django中使用SMTP发送邮件是一个常见的需求,通常用于发送用户注册确认邮件、密码重置邮件等,下面我们来看看如何在Django中配置S... 目录1. 配置 Django 项目以使用 SMTP2. 创建 Django 应用3. 添加应用到项目设置4. 创建

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

java poi实现Excel多级表头导出方式(多级表头,复杂表头)

《javapoi实现Excel多级表头导出方式(多级表头,复杂表头)》文章介绍了使用javapoi库实现Excel多级表头导出的方法,通过主代码、合并单元格、设置表头单元格宽度、填充数据、web下载... 目录Java poi实现Excel多级表头导出(多级表头,复杂表头)上代码1.主代码2.合并单元格3.

Python读取TIF文件的两种方法实现

《Python读取TIF文件的两种方法实现》本文主要介绍了Python读取TIF文件的两种方法实现,包括使用tifffile库和Pillow库逐帧读取TIFF文件,具有一定的参考价值,感兴趣的可以了解... 目录方法 1:使用 tifffile 逐帧读取安装 tifffile:逐帧读取代码:方法 2:使用

Spring Boot实现多数据源连接和切换的解决方案

《SpringBoot实现多数据源连接和切换的解决方案》文章介绍了在SpringBoot中实现多数据源连接和切换的几种方案,并详细描述了一个使用AbstractRoutingDataSource的实... 目录前言一、多数据源配置与切换方案二、实现步骤总结前言在 Spring Boot 中实现多数据源连接

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

Mybatis拦截器如何实现数据权限过滤

《Mybatis拦截器如何实现数据权限过滤》本文介绍了MyBatis拦截器的使用,通过实现Interceptor接口对SQL进行处理,实现数据权限过滤功能,通过在本地线程变量中存储数据权限相关信息,并... 目录背景基础知识MyBATis 拦截器介绍代码实战总结背景现在的项目负责人去年年底离职,导致前期规