首先,说明本文的程序引用自http://blog.csdn.net/yangtrees/article/details/7433598 ,主要的目的就是把彩色图像由RGB空间转变到HSV空间,然后绘制H-S的直方图,下面详细介绍。

#include <cv.h>  
#include <highgui.h>  
#include <iostream>  
using namespace std;
int main()
{

//读取原图,转换到HSV空间,程序后面有一个对HSV空间的简介;
IplImage * src = cvLoadImage("year.jpg");
IplImage* hsv = cvCreateImage(cvGetSize(src), 8, 3);
IplImage* h_plane = cvCreateImage(cvGetSize(src), 8, 1);
IplImage* s_plane = cvCreateImage(cvGetSize(src), 8, 1);
IplImage* v_plane = cvCreateImage(cvGetSize(src), 8, 1);
IplImage* planes[] = { h_plane, s_plane };//用于存放HSV图像的 H 和 S分量;
   
/** H 分量划分为16个等级,S分量划分为8个等级 */
int h_bins = 16, s_bins = 8; 
int hist_size[] = { h_bins, s_bins };

/** H 分量的变化范围 */
float h_ranges[] = { 0, 180 };
/** S 分量的变化范围*/
float s_ranges[] = { 0, 255 };
float* ranges[] = { h_ranges, s_ranges };

/** 输入图像转换到HSV颜色空间 */
cvCvtColor(src, hsv, CV_BGR2HSV);
cvCvtPixToPlane(hsv, h_plane, s_plane, v_plane, 0);

/** 创建直方图,二维, 每个维度上均分 */
CvHistogram * hist = cvCreateHist(2, hist_size, CV_HIST_ARRAY, ranges, 1);
/** 根据H,S两个平面数据统计直方图 */
cvCalcHist(planes, hist, 0, 0);

/** 获取直方图统计的最大值,用于动态显示直方图 */
float max_value;
cvGetMinMaxHistValue(hist, 0, &max_value, 0, 0);

/** 设置直方图显示图像 */
int height = 240;
int width = (h_bins*s_bins * 6);
IplImage* hist_img = cvCreateImage(cvSize(width, height), 8, 3);
cvZero(hist_img);

/** 用来进行HSV到RGB颜色转换的临时单位图像 */
IplImage * hsv_color = cvCreateImage(cvSize(1, 1), 8, 3);
IplImage * rgb_color = cvCreateImage(cvSize(1, 1), 8, 3);
int bin_w = width / (h_bins * s_bins);
for (int h = 0; h < h_bins; h++)
{
for (int s = 0; s < s_bins; s++)
{
int i = h*s_bins + s;
/** 获得直方图中的统计次数,计算显示在图像中的高度 */
float bin_val = cvQueryHistValue_2D(hist, h, s);
int intensity = cvRound(bin_val*height / max_value);//Round, Floor, Ceil 转换浮点数为整数(cvRound 返回和参数最接近的整数值。 cvFloor 返回不大于参数的最大整数值。cvCeil 返回不小于参数的最小整数值。)

/** 获得当前直方图代表的颜色,转换成RGB用于绘制 */
cvSet2D(hsv_color, 0, 0, cvScalar(h*180.f / h_bins, s*255.f / s_bins, 255, 0));
cvCvtColor(hsv_color, rgb_color, CV_HSV2BGR);
CvScalar color = cvGet2D(rgb_color, 0, 0);

cvRectangle(hist_img, cvPoint(i*bin_w, height),
cvPoint((i + 1)*bin_w, height - intensity),
color, -1, 8, 0);
}
}
cvNamedWindow("Source", 1);
cvShowImage("Source", src);
cvNamedWindow("H-S Histogram");
cvShowImage("H-S Histogram", hist_img);
cvSaveImage("h-s.jpg", hist_img);
cvWaitKey(0);
return 0;
}

第一个图是HSV空间组成,H(色相)S(饱和度)V(高度),仔细观察下面的图也能理解三者意思,以上程序建立直方图使用的是H-S两个分量,个人理解 H-S构成椎体的一个水平切面,V 表示切面与椎尖的距离,V的大小只能影响H-S切面上色彩的密度。

第二个是程序使用的原图,色彩比较丰富

第三个是得到的直方图,仔细观察下图有16个主要的颜色(H),每种颜色由浅到深分为8个区间(S)

彩色图像的直方图绘制相关推荐

  1. 直方图绘制与直方图均衡化实现

    一,直方图的绘制 1.直方图的概念: 在图像处理中,经常用到直方图,如颜色直方图.灰度直方图等. 图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所 占的多少. 图像的灰 ...

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

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

  3. r语言 plot_R语言直方图绘制hist(),plot()

    直方图绘制hist() 素娥 2020/9/27 本文我们要用iris数据集进行直方图的绘制 本文主要使用hist.plot函数进行绘制图片 首先还是观察数据类型 data<-iris libr ...

  4. 【拜小白opencv】45-二维H-S直方图绘制----calcHist()函数、minMaxLoc()函数

    常言道"温故而知新",写此文章就是对自己目前学习内容的小小的总结与记录. 本文力求用最简洁的语言,详细的代码将此部分内容讲解清楚,但由于博主同样是刚刚接触OpenCV,或许表达上有 ...

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

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

  6. python读取csv数据画直方图_python 中直方图绘制

    一.直方图绘制参数详解 1.plt.hist(x, bins=10, range=None, normed=False, weights=None, cumulative=False, bottom= ...

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

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

  8. 【OpenCV 4开发详解】图像直方图绘制

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  9. python绘制直方图-python matplotlib库直方图绘制详解

    例题:假设你获取了250部电影的时长(列表a中),希望统计出这些电影时长的分布状态(比如时长为100分钟到120分钟电影的数量,出现的频率)等信息,你应该如何呈现这些数据? 一些概念及问题: 把数据分 ...

最新文章

  1. MySQL主从的一致性校验及修复
  2. 爱了爱了!0.052 秒打开 100GB 数据,这个Python开源库火爆了!
  3. 匈牙利算法c语言代码,漫谈匈牙利算法
  4. 邵阳市工业学校计算机29班,邵阳市南门口大祥区沙子坡文明路11号计算机学校...
  5. 20210801:AXI-Lite总线逻辑与关键源码分析
  6. Debian - NFS搭建 + 测试
  7. 生活大爆炸第7季第6集Howard写给Bernadette的歌
  8. 时间进度表html,网页的设计进度表.doc
  9. 自己设计个动态屏保吧
  10. 揭密征途赚钱模式:史玉柱在赚谁的钱
  11. led的伏安特性曲线 matlab实现_Matlab在伏安特性实验中的应用
  12. w7计算机文件夹打开怎么设置密码,win7电脑文件夹怎么设置密码
  13. crucible3.x +fisheye3.x 安装和破解
  14. 在家做什么小生意赚钱,这6种最适合在家操作!
  15. 为什么游戏需要热更新?
  16. 深信服2022届校招——安全服务工程师笔试
  17. 为什么工程师出身的 CEO 越来越“香”?
  18. 乐吾乐2D可视化智慧光伏能源赋能方案
  19. 渗透测试之漏洞检测篇
  20. 用html制作双色球代码,Html5 canvas 绘制彩票走势图

热门文章

  1. keyshot手机渲染教程_keyshot渲染教程
  2. 大学计算机课桌面弄毛玻璃,高校换上新课桌,同学表示“世界观被颠覆”,网友:黑科技的诞生...
  3. [干货] 杜绝广告, 让你的电脑变的更加干净舒适
  4. 1秒出图,全球最快的开源Stable Diffusion出炉
  5. 去掉SecureCRT菜单栏上的打印按钮
  6. linux进化树分析的软件,进化树分析及相关软件使用说明
  7. 传统企业数字化转型方案
  8. 关系型数据库篇(MSSQL)
  9. 逆向工程实验——pre6(汇编、Android逆向、RSA算法破解)
  10. 滑雪问题(dfs+dp)