我们可以用同一个 cv::calcHist 函数计算多通道图像的直方图。例如,若想计算彩色 BGR图像的直方图,可以这样定义一个类:

class ColorHistogram { private: int histSize[3]; // 每个维度的大小float hranges[2]; // 值的范围(三个维度用同一个值)const float* ranges[3]; // 每个维度的范围int channels[3]; // 需要处理的通道public: ColorHistogram() { // 准备用于彩色图像的默认参数// 每个维度的大小和范围是相等的histSize[0]= histSize[1]= histSize[2]= 256; hranges[0]= 0.0; // BGR 范围为 0~256 hranges[1]= 256.0; ranges[0]= hranges; // 这个类中ranges[1]= hranges; // 所有通道的范围都相等ranges[2]= hranges; channels[0]= 0; // 三个通道:B channels[1]= 1; // G channels[2]= 2; // R }

这里的直方图将会是三维的,因此需要为每个维度指定一个范围。本例中的 BGR 图像的三个通道范围都是[0,255]。准备好参数后,就可以用下面的方法计算颜色直方图了:

// 计算直方图
cv::Mat getHistogram(const cv::Mat &image) { cv::Mat hist; // 计算直方图cv::calcHist(&image, 1, // 单幅图像的直方图channels, // 用到的通道cv::Mat(), // 不使用掩码hist, // 得到的直方图3, // 这是一个三维直方图histSize, // 箱子数量ranges // 像素值的范围); return hist;
}

上述方法返回一个三维的 cv::Mat 实例。如果选用含有 256 个箱子的直方图,这个矩阵就有(256)^3 个元素,表示超过 1600 万个项目。在很多应用程序中,最好在计算直方图时减少箱子的数量。也可以使用数据结构 cv::SparseMat 表示大型稀疏矩阵(即非零元素非常稀少的矩阵),这样不会消耗过多的内存。cv::calcHist 函数具有返回这种矩阵的版本,因此只需要简单地修改一下前面的方法,即可使用 cv::SparseMatrix:

// 计算直方图
cv::SparseMat getSparseHistogram(const cv::Mat &image) { cv::SparseMat hist(3, // 维数histSize, // 每个维度的大小CV_32F); // 计算直方图cv::calcHist(&image, 1, // 单幅图像的直方图channels, // 用到的通道cv::Mat(), // 不使用掩码hist, // 得到的直方图3, // 这是三维直方图histSize, // 箱子数量ranges // 像素值的范围); return hist;
}

这是一个三维直方图,画起来比较困难。我们也可以通过显示独立的 R、G 和 B 通道的直方
图来说明图像中颜色的分布情况。

计算彩色图像的直方图相关推荐

  1. Python图像处理介绍--彩色图像的直方图处理

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 引言 在昨天的文章中我们介绍了基于灰度图像的直方图处理,也简单的提 ...

  2. matlab实现彩色图像的直方图均衡化

    本篇用于记录用matlab实现彩色图像的直方图均衡化算法,并与matlab自带的直方图均衡化函数histeq做对比. 直方图原理可以参考下面的博客文章:直方图均衡化 原理.流程.公式推导及matlab ...

  3. 彩色图像的直方图均衡化

    彩色图像的直方图均衡化 1.彩色图像的直方图均衡化 这里我采用的方法是直接将彩色图像的 R . G . B 分量做直方图均衡化然后再将三个分量合并起来. 2.实现代码 (1)灰度图的直方图均衡化,曾经 ...

  4. Google earth engine(GEE)——平均气温计算并且显示直方图

    美国三个州的平均气温计算并且显示直方图 完整的图形是这样的 这是我改了代码之后显示了一年十二个月的一个数据,坐标标签直接改成数字了 这里面有一个数据集OREGONSTATE/PRISM/Norm81m ...

  5. 彩色图像的直方图绘制

    首先,说明本文的程序引用自http://blog.csdn.net/yangtrees/article/details/7433598 ,主要的目的就是把彩色图像由RGB空间转变到HSV空间,然后绘制 ...

  6. 计算图像的直方图,求峰值点

    程序步骤: 1.输入图像 2.灰度化 3.计算直方图 4.求峰值点 #include "../LaneDetecte_SRC/detector_lane.hpp" #include ...

  7. python绘制图像直方图_Python – 计算图像的直方图

    我正在努力教自己计算机化图像处理的基础知识,同时我也在教自己Python. 给定具有3个通道的尺寸为2048×1354的图像x,有效地计算像素强度的直方图. import numpy as np, c ...

  8. Matlab计算矩阵频率分布直方图

    最近在做温差频率分布直方图统计. 先来看下最新的histogram 一些使用语法直接拉到最底,重点说两个. 废话不多说上代码: a=[1,2,3;3,4,5;2,3,1]; histogram(a) ...

  9. 用Matlab绘彩色图像的直方图

    直方图是常用的图表,用MATLAB实现如下: Img=imread('football.jpg'); BW = Img; R=BW(:,:,1); [REDcounts,x] = imhist(R); ...

最新文章

  1. Http接口设计(1)Token之前
  2. Linux的vagrant配置vmware
  3. sqlalchemy(二)高级用法
  4. android工程中的软件,通过Android Studio创建Android应用程序(附带解析)
  5. 详解工作流框架Activiti的服务架构和组件
  6. Jmeter之Synchronizing Timer(同步集合点)
  7. python钓鱼网站_Python+MySQL获取PhishTank的钓鱼网站列表作业笔记
  8. sql server 替换字符串中的某些字符
  9. Vmlogin防关联超级浏览器Selenium浏览器自动化详细教程
  10. win95光盘版安装方法
  11. endnote找不到国标_电动车新国标实施首日,实况如何?遇到这些问题别急!
  12. 读余华《活着》,你好,我叫福贵
  13. php pear pecl 区别,pecl 简单介绍
  14. 计算机操作上机考试题目,计算机系统操作工上机操作考试题.pdf
  15. 阿里云服务器安装oracle11g——会用的到,建议收藏
  16. linux服务器安装laravel教程
  17. 想提高团队技术,来试试这个套路!
  18. 165页最全银行IT核心系统研究框架
  19. 下载并安装windows版本的Redis
  20. 天龙八部怀旧服务器维护,新天龙八部怀旧服 2月18日全服更新维护公告

热门文章

  1. 麒麟820和鸿蒙系统,网曝魅族正在适配麒麟820和鸿蒙系统,黄章:我怎么不知道...
  2. 牛年学“牛”词:关于牛的短语和句子
  3. 2020-2021 ICPC - Gran Premio de Mexico - Repechaje
  4. 计算机用户名怎么改好听,Win10如何修改电脑名字 Win10重命名电脑名称方法图解...
  5. Python大数据-电商产品评论情感数据分析
  6. TDA4VM PDK应用笔记
  7. 用于地址解析的协议是服务器,用于解析域名的协议是什么?
  8. 美股分时交易数据 API 接口
  9. htmltabl生成html表格并发送企业微信
  10. pptpd搭建过程中 启动成功但不显示ppp0端口