首页 > 其他分享 >opencv实现像素统计的示例代码

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

时间:2025-01-16 16:47:44浏览次数:1  
标签:std 示例 int image 像素 opencv cv 统计

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

标签:std,示例,int,image,像素,opencv,cv,统计
From: https://www.cnblogs.com/Ryan9399/p/18675247

相关文章

  • 利用Python按关键字搜索阿里巴巴商品:代码示例与实践指南
    在电商领域,能够快速获取商品信息对于市场分析、选品上架、库存管理和价格策略制定等至关重要。阿里巴巴作为全球最大的电商平台之一,提供了丰富的商品数据。虽然阿里巴巴开放平台提供了官方API来获取商品信息,但有时使用爬虫技术来抓取数据也是一种有效的手段。本文将介绍如何利......
  • C#NPOI示例
    主程序要添加NPOI的库。代码如下staticvoidMain(string[]args){Export();}publicstaticvoidExport(){//创建新的Excel工作簿IWorkbookworkbook=newXSSFWorkbook();......
  • SpringBoot+Redis+消息队列 技术的抢购方案【附有图文+示例代码】
    文章目录SpringBoot+Redis+消息队列技术的抢购方案13.1简单抢购13.2模拟高并下发抢购jmeter工具使用实现13.3数据安全问题加锁synchronized分布式锁13.4消息队列完成抢购【yml配置文件】【实体类】【redis工具类】【队列配置类】【controller】【队列监听器RabbitQM......
  • Bartender SDK C#调用二次开发 代码示例
    说明软件版本:Bartender2022是否支持32位:否SDK类型:Engine类调用(还有另一种风格的SDK,忘记是啥了)引用COM库参考路径:Seagull\BarTender2022\SDK\Assemblies\Seagull.BarTender.Print.dll可能只能用framework4.8跑启动引擎//启动引擎(第一次运行耗时较多)EnginebtEngine=......
  • 互亿无线发短信示例
    //发送短信消息publicfunctionsendmsg($phone=''){//$phone='13333333333';$account='C55xxxxxx';$password='xxxxxxxxxxxxxxxxxx';$content='您好!温馨提醒,xxxxxxxxxxxxx'......
  • ArkTS简介与代码示例
    鸿蒙操作系统(HarmonyOS)是由华为技术有限公司开发的面向未来、面向全场景的分布式操作系统。它旨在为用户提供跨设备无缝协同体验,支持多种终端设备,如智能手机、平板电脑、智能穿戴设备等。为了适应不同的应用场景和硬件能力,鸿蒙提供了多语言编程的支持,其中包括ArkTS(ArkTypeScri......
  • 说说你对设备像素比的理解
    设备像素比(DevicePixelRatio,简称DPR)是一个重要的前端开发概念,它描述了物理像素和设备独立像素(DIPs,DeviceIndependentPixels)之间的比例关系。这个概念尤其在响应式设计和移动端开发中非常重要。定义:物理像素:是屏幕上的实际发光点,也称为设备像素。屏幕的分辨率就是由这些......
  • Opencv 的下载安装和VisualStudio配置
    Opencv的下载安装和VisualStudio配置1opencv-windows的下载1.1github直接下载链接(需要外网链接)最新4.10.0版本的下载链接为:https://github.com/opencv/opencv/releases/download/4.10.0/opencv-4.10.0-windows.exe1.2官网下载其他版本官网链接:https://opencv.org/rele......
  • Java RestTemplate 发送 POST 请求设置请求体示例
    在Java中使用RestTemplate​发送POST请求并设置请求体(body)参数,可以按照以下步骤进行。RestTemplate​是Spring提供的一个用于发送HTTP请求的工具类。示例代码以下是一个完整的示例,展示如何使用RestTemplate​发送POST请求并设置请求体参数:importorg.sp......
  • Java RestTemplate 发送 POST 请求设置请求体示例
    在Java中使用RestTemplate​发送POST请求并设置请求体(body)参数,可以按照以下步骤进行。RestTemplate​是Spring提供的一个用于发送HTTP请求的工具类。示例代码以下是一个完整的示例,展示如何使用RestTemplate​发送POST请求并设置请求体参数:importorg.sp......