首页 > 其他分享 >OpenCV(cv::calcHist())

OpenCV(cv::calcHist())

时间:2024-08-28 11:53:14浏览次数:5  
标签:calcHist OpenCV 直方图 计算 图像 掩码 histSize cv

目录



cv::calcHist() 是 OpenCV 中用于计算图像或图像集合的直方图的函数。直方图是一个图像的像素值的分布统计,它表示图像中每个像素强度值的频率。

1. 函数定义

cv::calcHist(const Mat* images, int nimages, const int* channels, InputArray mask,
             OutputArray hist, int dims, const int* histSize,
             const float** ranges, bool uniform=true, bool accumulate=false)

参数:

  1. images
    指向源图像(或图像数组)的指针,通常是一个 cv::Mat 类型对象的数组。例如,对于单通道灰度图像,它通常是指向一个图像的指针。

  2. nimages
    这是图像的数量,通常为 1。如果你要计算多幅图像的直方图,可以传递多个图像。

  3. channels
    这是需要计算直方图的通道索引。例如,对于彩色图像,可以分别计算 B、G、R 三个通道的直方图。对于灰度图像,通道索引通常为 0。

  4. mask
    用于选择计算直方图的区域。可以是一个掩码图像,该掩码通常是一个单通道的 8 位图像,非零值的区域表示参与直方图计算的区域。传递 cv::Mat() 可以忽略掩码。

  5. hist
    这是输出的直方图,通常是一个 cv::Mat 对象。该对象包含直方图数据。

  6. dims
    直方图的维度。对于一维直方图,dims = 1;对于二维直方图(例如,用于分析颜色分布),dims = 2

  7. histSize
    每个维度的直方图 bin 数量。对于一维直方图,它是一个包含 bin 数量的数组。例如,histSize = {256} 表示每个通道有 256 个 bin。

  8. ranges
    每个维度的取值范围。通常,它是一个二维数组,每个维度都有一个 [minValue, maxValue] 的范围。例如,对于 8 位图像,通常范围是 [0, 256]

  9. uniform
    布尔值,表示 bin 的宽度是否均匀分布。如果为 true,则范围被均匀划分为 histSize 个区间。

  10. accumulate
    布尔值,表示是否累加直方图。如果为 true,则将新的计算结果累加到已有的直方图中,而不是重新计算。



2. 示例

计算灰度图像的一维直方图的简单示例:

#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);

    if (image.empty()) {
        std::cout << "Could not load image!" << std::endl;
        return -1;
    }

    // 初始化直方图参数
    int histSize = 256;        // bin 数量
    float range[] = {0, 256};  // 范围
    const float* histRange = {range};

    // 输出直方图
    cv::Mat hist;

    // 计算直方图
    cv::calcHist(&image, 1, 0, cv::Mat(), hist, 1, &histSize, &histRange);

    // 输出结果
    std::cout << "Histogram values: " << hist << std::endl;

    return 0;
}


3. 功能说明

  1. 单通道图像直方图:通常用于灰度图像,计算每个像素强度值(0-255)的分布频率。
  2. 多通道图像直方图:可以用于彩色图像,通过指定不同的 channels 参数来分别计算 B、G、R 通道的直方图。
  3. 掩码直方图:可以指定掩码,只计算图像中感兴趣区域的直方图。
  4. 多维直方图:可以通过设置 dimshistSize 来计算多维直方图,例如,二维直方图用于表示颜色组合的分布。


4. 典型应用

  • 图像分析:通过直方图可以分析图像的亮度、对比度、颜色分布等特性。
  • 直方图均衡化:通过直方图进行均衡化,可以改善图像的对比度。
  • 图像分割:利用直方图信息可以帮助进行图像阈值分割或其他分析任务。


标签:calcHist,OpenCV,直方图,计算,图像,掩码,histSize,cv
From: https://www.cnblogs.com/keye/p/18384375

相关文章

  • OpenCV 图像矫正技术深入探讨
    刚进入实验室导师就交给我一个任务,就是让我设计算法给图像进行矫正。哎呀,我不太会图像这块啊,不过还是接下来了,硬着头皮开干吧!那什么是图像的矫正呢?举个例子就好明白了。我的好朋友小明给我拍了这几张照片,因为他的拍照技术不咋地,照片都拍得歪歪扭扭的,比如下面这些照片:人民......
  • OpenCV Mat和IplImage访问像素的方法总结
    在opencv的编程中,遍历访问图像元素是经常遇到的操作,掌握其方法非常重要,无论是Mat类的像素访问,还是IplImage结构体的访问的方法,都必须扎实掌握,毕竟,图像处理本质上就是对像素的各种操作,访问元素就是各种图像处理算法的第一步。首先先看看图像的是怎么存储的。单通道图像多......
  • CSEC:香港城市大学提出SOTA曝光矫正算法 | CVPR 2024
    CSEC:香港城市大学提出SOTA曝光矫正算法|CVPR2024 在光照条件不佳下捕获的图像可能同时包含过曝和欠曝。目前的方法主要集中在调整图像亮度上,这可能会加剧欠曝区域的色调失真,并且无法恢复过曝区域的准确颜色。论文提出通过学习估计和校正这种色调偏移,来增强既有过曝又有欠......
  • CSEC:香港城市大学提出SOTA曝光矫正算法 | CVPR 2024
    在光照条件不佳下捕获的图像可能同时包含过曝和欠曝。目前的方法主要集中在调整图像亮度上,这可能会加剧欠曝区域的色调失真,并且无法恢复过曝区域的准确颜色。论文提出通过学习估计和校正这种色调偏移,来增强既有过曝又有欠曝的图像。先通过基于UNet的网络推导输入图像的增亮和变暗......
  • FlexAttention:解决二次复杂度问题,将大型视觉语言模型的输入提升至1008 | ECCV 2024
    \({\ttFlexAttention}\)是一种旨在增强大型视觉语言模型的方法,通过利用动态高分辨率特征选择和分层自注意机制,使其能够有效地处理并从高分辨率图像输入中获得优势,\({\ttFlexAttention}\)在性能和效率方面超越了现有的高分辨率方法。来源:晓飞的算法工程笔记公众号论文:F......
  • Yololov5+Pyqt5+Opencv 实时城市积水报警系统
    在现代城市生活中,积水问题不仅影响交通和人们的日常生活,还可能对城市基础设施造成潜在的威胁。为了快速、准确地识别和应对积水问题,使用计算机视觉技术进行智能积水检测成为一个重要的解决方案。在这篇博客中,我将带你一步步实现一个基于YOLOv5的积水检测系统,帮助你轻松应对城市......
  • OpenCV(cv::circle())
    目录1.函数2.示例3.说明4.使用场景cv::circle()是OpenCV提供的一个函数,用于在图像上绘制圆形。它非常适用于在图像处理任务中标记特定的点或区域。这个函数具有多种参数,允许你根据需要控制圆的颜色、位置、半径和边界厚度。1.函数voidcv::circle(InputOutputArrayi......
  • 从0到1构建视频汇聚生态:EasyCVR流媒体协议支持的前瞻性布局
    TSINGSEE青犀EasyCVR视频汇聚平台是一款基于云-边-端一体化架构的视频融合+AI智能分析平台,广泛应用于工地、仓储、工厂、社区、校园、楼宇等多个领域。平台凭借其强大的数据接入、处理、转码及分发能力,在视频监控领域展现出显著的技术优势和应用前景。本文将详细介绍EasyCVR视频汇......
  • 高效能低延迟:EasyCVR平台WebRTC支持H.265在远程监控中的优势
    TSINGSEE青犀视频EasyCVR视频汇聚平台在WebRTC方面确实支持H.265编码,尽管标准的WebRTCAPI在大多数浏览器中默认并不支持H.265(也称为HEVC,高效视频编码)编码。EasyCVR平台通过一系列创新的技术手段,实现了在WebRTC协议下对H.265视频的支持。EasyCVR平台采取了将视频以H.265编码并搭......
  • 安防视频汇聚平台EasyCVR启动后无法访问登录页面是什么原因?
    安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台基于云边端一体化架构,兼容性强、支持多协议接入,包括国标GB/T28181协议、部标JT808、GA/T1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SDK等。有用户反馈,安防监控系统......