1. #include <cv.h>
  2. #include <highgui.h>
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. int main( int argc, char** argv )
  7. {
  8. IplImage * src= cvLoadImage("D:/2.jpg");
  9.  
  10. IplImage* hsv = cvCreateImage( cvGetSize(src), , );
  11. IplImage* h_plane = cvCreateImage( cvGetSize(src), , );
  12. IplImage* s_plane = cvCreateImage( cvGetSize(src), , );
  13. IplImage* v_plane = cvCreateImage( cvGetSize(src), , );
  14. IplImage* planes[] = { h_plane, s_plane };
  15.  
  16. /** H 分量划分为16个等级,S分量划分为8个等级 */
  17. int h_bins = , s_bins = ;
  18. int hist_size[] = {h_bins, s_bins};
  19.  
  20. /** H 分量的变化范围 */
  21. float h_ranges[] = { , };
  22.  
  23. /** S 分量的变化范围*/
  24. float s_ranges[] = { , };
  25. float* ranges[] = { h_ranges, s_ranges };
  26.  
  27. /** 输入图像转换到HSV颜色空间 */
  28. cvCvtColor( src, hsv, CV_BGR2HSV );
  29. cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, );
  30.  
  31. /** 创建直方图,二维, 每个维度上均分 */
  32. CvHistogram * hist = cvCreateHist( , hist_size, CV_HIST_ARRAY, ranges, );
  33. /** 根据H,S两个平面数据统计直方图 */
  34. cvCalcHist( planes, hist, , );
  35.  
  36. /** 获取直方图统计的最大值,用于动态显示直方图 */
  37. float max_value;
  38. cvGetMinMaxHistValue( hist, , &max_value, , );
  39.  
  40. /** 设置直方图显示图像 */
  41. int height = ;
  42. int width = (h_bins*s_bins*);
  43. IplImage* hist_img = cvCreateImage( cvSize(width,height), , );
  44. cvZero( hist_img );
  45.  
  46. /** 用来进行HSV到RGB颜色转换的临时单位图像 */
  47. IplImage * hsv_color = cvCreateImage(cvSize(,),,);
  48. IplImage * rgb_color = cvCreateImage(cvSize(,),,);
  49. int bin_w = width / (h_bins * s_bins);
  50. for(int h = ; h < h_bins; h++)
  51. {
  52. for(int s = ; s < s_bins; s++)
  53. {
  54. int i = h*s_bins + s;
  55. /** 获得直方图中的统计次数,计算显示在图像中的高度 */
  56. float bin_val = cvQueryHistValue_2D( hist, h, s );
  57. int intensity = cvRound(bin_val*height/max_value);//Round, Floor, Ceil 转换浮点数为整数(cvRound 返回和参数最接近的整数值。 cvFloor 返回不大于参数的最大整数值。cvCeil 返回不小于参数的最小整数值。)
  58.  
  59. /** 获得当前直方图代表的颜色,转换成RGB用于绘制 */
  60. cvSet2D(hsv_color,,,cvScalar(h*.f / h_bins,s*.f/s_bins,,));
  61. cvCvtColor(hsv_color,rgb_color,CV_HSV2BGR);
  62. CvScalar color = cvGet2D(rgb_color,,);
  63.  
  64. cvRectangle( hist_img, cvPoint(i*bin_w,height),
  65. cvPoint((i+)*bin_w,height - intensity),
  66. color, -, , );
  67. }
  68. }
  69.  
  70. cvNamedWindow( "Source", );
  71. cvShowImage( "Source", src );
  72.  
  73. cvNamedWindow( "H-S Histogram", );
  74. cvShowImage( "H-S Histogram", hist_img );
  75.  
  76. cvWaitKey();
  77. }

from: http://blog.csdn.net/yangtrees/article/details/7433598

学习OpenCV——绘制彩色直方图(HSV2BGR)的更多相关文章

  1. OpenCV 绘制图像直方图

    OpenCV绘制图像直方图,版本2.4.11 直方图可展示图像中的像素分布,是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数.可以借助观察该直方图了解需要如何调整亮度分布.这种直方 ...

  2. opencv绘制灰度直方图

    代码之一: #include <cv.h> #include <highgui.h> #pragma comment( lib, "cv.lib" ) #p ...

  3. OpenCV分通道显示图片,灰度,融合,直方图,彩色直方图

    代码有参考跟整合:没有一一列出出处 // split_rgb.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <io ...

  4. 深度学习 + OpenCV,Python实现实时视频目标检测

    使用 OpenCV 和 Python 对实时视频流进行深度学习目标检测是非常简单的,我们只需要组合一些合适的代码,接入实时视频,随后加入原有的目标检测功能. 在本文中我们将学习如何扩展原有的目标检测项 ...

  5. 怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图?

      分类: OpenCV [Q1]怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图? 进行灰度化,IplImage* pImg = cvLoadImage( "C:\\1.b ...

  6. 《学习OpenCV》练习题第四章第三题b

    #include <highgui.h> #include <cv.h> #include "opencv_libs.h" /* *<学习OpenCV ...

  7. 学习opencv中文版教程——第二章

    学习opencv中文版教程——第二章 所有案例,跑起来~~~然而并没有都跑起来...我只把我能跑的都尽量跑了,毕竟看书还是很生硬,能运行能出结果,才比较好. 越着急,心越慌,越是着急,越要慢,越是陌生 ...

  8. 学习OpenCV——SVM

    学习OpenCV——SVM 学习SVM,首先通过http://zh.wikipedia.org/wiki/SVM, 再通过博客http://blog.csdn.net/yang_xian521/art ...

  9. 【从零学习openCV】IOS7人脸识别实战

    前言 接着上篇<IOS7下的人脸检測>,我们顺藤摸瓜的学习怎样在IOS7下用openCV的进行人脸识别,实际上非常easy,因为人脸检測部分已经完毕,剩下的无非调用openCV的方法对採集 ...

随机推荐

  1. lua日期与时间操作

    os.date("%Y%m%d%H%M%S", os.time()) <== 20160405141211 yyyyMMddHHmmss os.time()          ...

  2. Java生成动态GIF图片

    写selenium自动化时,为了查看运行效果,后给浏览器截图,想到可以生成gif图片来快速预览.看到已经有人实现了,直接拿过来. 共涉及到三个java文件,分别是NeuQuant.java,LZWEn ...

  3. About-PHP-02

    如果要给table里面的td添加颜色,有两种方法: <html> <head> <meta http-equiv="Content-Type" con ...

  4. HTML第二节课

    表单 <form id="" name="" method="post/get" action=""> &l ...

  5. Thinkphp框架感悟(二)

    这次主要分析一下I方法 /** * 获取输入参数 支持过滤和默认值 * 使用方法: * <code> * I('id',0); 获取id参数 自动判断get或者post * I('post ...

  6. vs2013打开 2010项目时: 请确认 <Import> 声明中的路径正确,且磁盘上存在该文件

    错误原因:原来2010项目中使用的路径是 v11.0,但是我的 C:\Program Files (x86)\MSBuild\12.0\ 是 12.0,所以该成 12.0 解决办法:将项目文件(.cs ...

  7. (转)MySQL优化实例

    在Apache, PHP,MySQL的体系架构中,MySQL对于性能的影响最大,也是关键的核心部分.对于Discuz!论坛程序也是如此,MySQL的设置是否合理优化,直接影响到论坛的速度和承载量!同时 ...

  8. 为什么会出现Python Exception <class 'gdb.MemoryError'> Cannot access memory at address 问题?

    问题描述:        把列表listview写入notebook里. 在main函数中, win = create_and_set_a_window(); book = gtk_notebook_ ...

  9. jQuery判断元素是否存在方法总结

    在jquery中判断元素是否存在我们可使用$("#div").length > 0)来判断了,意思就是判断元素长度了,如果没有肯定是不存在的哦,下面我来介绍介绍. 使用传统j ...

  10. readyState0 1 2 3 4..

    0:请求未初始化(还没有调用 open()). 1:请求已经建立,但是还没有发送(还没有调用 send()). 2:请求已发送,正在处理中(通常现在可以从响应中获取内容头). 3:请求在处理中:通常响 ...