在 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;
}
  1. 统计像素值的直方图

    直方图计算: 使用 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;
}
  1. 统计像素值的总和

    像素值求和: 使用 cv::sum() 函数可以计算图像中所有像素值的总和。

    cv::Scalar sum = cv::sum(image); std::cout << "Sum of pixel values: " << sum[0] << std::endl;

  2. 统计非零像素的数量

    非零像素统计: 使用 cv::countNonZero() 函数可以统计图像中非零像素的数量。

    int nonZeroCount = cv::countNonZero(image); std::cout << "Non-zero pixel count: " << nonZeroCount << std::endl;

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

    对于多通道图像(如 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;
}
  1. 统计像素值的百分比

如果需要统计像素值的百分比(如 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 图像的像素信息。这些统计信息对于图像处理、分析和特征提取等任务非常重要。根据具体需求,可以选择合适的方法进行像素统计。

opencv实现像素统计的示例代码的更多相关文章

  1. opencv:像素统计信息

    #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...

  2. OpenCV漫水填充算法示例代码

    #include<cv.h> #include<highgui.h> int main(int argc, char** argv) { IplImage* img = cvL ...

  3. C/C++ 开源库及示例代码

    C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...

  4. OpenCV亚像素角点cornerSubPixel()源代码分析

    上一篇博客中讲到了goodFeatureToTrack()这个API函数能够获取图像中的强角点.但是获取的角点坐标是整数,但是通常情况下,角点的真实位置并不一定在整数像素位置,因此为了获取更为精确的角 ...

  5. python开源项目及示例代码

    本页面是俺收集的各种 Python 资源,不定期更新. 下面列出的各种 Python 库/模块/工具,如果名称带超链接,说明是第三方的:否则是 Python 语言内置的. 1 算法 1.1 字符串处理 ...

  6. python开源项目及示例代码(转)

    本页面是俺收集的各种 Python 资源,不定期更新. 下面列出的各种 Python 库/模块/工具,如果名称带超链接,说明是第三方的:否则是 Python 语言内置的. 1 算法 1.1 字符串处理 ...

  7. Spark 跑 java 示例代码

    一.下载示例代码: git clone https://github.com/melphi/spark-examples.git 从示例代码中可以看到 pox中引入了 Spark开发所需要的依赖. 二 ...

  8. Hadoop基础-Map端链式编程之MapReduce统计TopN示例

    Hadoop基础-Map端链式编程之MapReduce统计TopN示例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.项目需求 对“temp.txt”中的数据进行分析,统计出各 ...

  9. opencv图像像素值读取

    说到图像像素,肯定要先认识一下图像中的坐标系长什么样. 1. 坐标体系中的零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线:Y轴为图像矩形左边的那条垂直线.该坐标体系在诸如结构体Mat,Rect ...

  10. Redis简单命令(部分示例代码)

    一.redis文件夹下的可执行文件(文章尾部有示例代码) 可执行文件 作用 redis-server 启动redis redis-cli redis命令行工具 redis-benchmark 基准测试 ...

随机推荐

  1. 推荐 groovy 的 sql 模块

    发现 groovy 的 sql 很好用,写下来代码风格和 d2js 很像,唯一的不足是没有 sql{..} 块的设计,但对 Java 程序员来说它已经非常友好了,来自它的网站的一段示例: Now yo ...

  2. pycharm选择conda虚拟环境出错:python的SDK无效

    检查项如下: 0.安装了python,并在系统环境变量中配置了python 0.5 正确配置了conda的系统环境变量 1.安装conda的文件夹又读写权限(不需要管理员模式运行也能进行读写) 直接在 ...

  3. docker-compose.yml 使用说明

    docker-compose.yml 结构 docker-compose.yml文件分为三个主要部分:services.networks.volumes..services主要用来定义各个容器.net ...

  4. Qt编写可视化大屏电子看板系统25-模块3设备监控

    一.前言 设备监控主要用来实时监测制造零件等使用的设备的工作运行状态,每个设备都有对应的需要.分组名称.分组编号.设备名称.文字1.文字2.工作状态(1-开机 2-待机 3-维护 4-空),不同的工作 ...

  5. Qt编写可视化大屏电子看板系统21-数据转曲线

    一.前言 数据转曲线,这个用的非常多,比如串口或者网络收到的数据,对特定的字节数据绘制实时的曲线,或者对历史记录存储的数据进行曲线绘制,按照约定的规则,数据转曲线绘制必须提供规则,没有规则只能对所有数 ...

  6. Python设计模式(第2版)中文的pdf电子书

    Python设计模式(第2版)中文的pdf电子书下载地址:百度云盘,提取码:dmem

  7. Ant和Ivy集成部署和使用

    Apache Ivy是专门用来管理项目的jar包依赖的.我们知道Maven已经有很出色的这方面的功能,如果你已经在使用Maven,就没必要使用Ivy了.但是其实Maven除了这方面功能,还有很多强大的 ...

  8. 跟着源码学IM(十二):基于Netty打造一款高性能的IM即时通讯程序

    本文由竹子爱熊猫分享,原题"(十一)Netty实战篇:基于Netty框架打造一款高性能的IM即时通讯程序",本文有修订和改动. 1.引言 关于Netty网络框架的内容,前面已经讲了 ...

  9. 异步 QQ 机器人框架_NoneBot

    一.NoneBot使用 1) #监控发送的消息"群发"的事件@on_command('send_msg', aliases=('群发',))async def send_msg(s ...

  10. mac sublime text3-快捷键

    cmd+n 新建页面 cmd+数字键 切换到对应页面 cmd+p 搜索跳转到对应页 cmd+w 关闭页面 cmd+j 合并一行 cmd+d 选中当前单词,继续敲可以选中多个 cmd+l 选中当前行 c ...