OpenCV颜色直方图
#include "stdafx.h" void myShowHist(IplImage* image1,IplImage* image2);
IplImage* cvShowHist(IplImage* src); int main()
{
//对彩色图像进行均衡化 IplImage * image= cvLoadImage("E:\\C_VC_code\\Text_Photo\\girl004.jpg");
IplImage* eqlimage=cvCreateImage(cvGetSize(image),image->depth,); //信道分离
IplImage* redImage=cvCreateImage(cvGetSize(image),image->depth,);
IplImage* greenImage=cvCreateImage(cvGetSize(image),image->depth,);
IplImage* blueImage=cvCreateImage(cvGetSize(image),image->depth,); cvSplit(image,blueImage,greenImage,redImage,NULL);//用 cvSplit 函数分解图像到单个色彩通道上 /*
cvNamedWindow("red",CV_WINDOW_AUTOSIZE);
cvNamedWindow("green",CV_WINDOW_AUTOSIZE);
cvNamedWindow("blue",CV_WINDOW_AUTOSIZE); cvShowImage("red",redImage);
cvShowImage("green",greenImage);
cvShowImage("blue",blueImage);
*/ //cvEqualizeHist()是适用于灰度图象直方图均衡化,所以必须先将图片分解到单通道上
//分别均衡化每个信道
cvEqualizeHist(redImage,redImage);
cvEqualizeHist(greenImage,greenImage);
cvEqualizeHist(blueImage,blueImage); /*
cvNamedWindow("red2",CV_WINDOW_AUTOSIZE);
cvNamedWindow("green2",CV_WINDOW_AUTOSIZE);
cvNamedWindow("blue2",CV_WINDOW_AUTOSIZE); cvShowImage("red2",redImage);
cvShowImage("green2",greenImage);
cvShowImage("blue2",blueImage);
*/ //信道合并
cvMerge(blueImage,greenImage,redImage,NULL,eqlimage); //显示图片和直方图
cvNamedWindow( "source", );
cvShowImage("source",image); cvNamedWindow( "Equalized", );
cvShowImage("Equalized",eqlimage);
cvSaveImage("equalized.jpg",eqlimage); myShowHist(image,eqlimage); cvWaitKey(); cvDestroyWindow("source");
cvDestroyWindow("result");
cvReleaseImage( &image );
cvReleaseImage( &eqlimage ); } void myShowHist(IplImage* image1,IplImage* image2)
{
IplImage* hist_image1=cvShowHist(image1);
IplImage* hist_image2=cvShowHist(image2); cvNamedWindow( "H-S Histogram1", );
cvShowImage( "H-S Histogram1", hist_image1 ); cvNamedWindow( "H-S Histogram2", );
cvShowImage( "H-S Histogram2", hist_image2 ); cvSaveImage("Histogram1.jpg",hist_image1);
cvSaveImage("Histogram2.jpg",hist_image2);
} IplImage* cvShowHist(IplImage* src)
{
IplImage* hsv = cvCreateImage( cvGetSize(src), , );
IplImage* h_plane = cvCreateImage( cvGetSize(src), , );
IplImage* s_plane = cvCreateImage( cvGetSize(src), , );
IplImage* v_plane = cvCreateImage( cvGetSize(src), , );
IplImage* planes[] = { h_plane, s_plane }; /** H 分量划分为16个等级,S分量划分为8个等级 */
int h_bins = , s_bins = ;
int hist_size[] = {h_bins, s_bins}; /** H 分量的变化范围 */
float h_ranges[] = { , }; /** S 分量的变化范围*/
float s_ranges[] = { , };
float* ranges[] = { h_ranges, s_ranges }; /** 输入图像转换到HSV颜色空间 */
cvCvtColor( src, hsv, CV_BGR2HSV );
cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, ); /** 创建直方图,二维, 每个维度上均分 */
CvHistogram * hist = cvCreateHist( , hist_size, CV_HIST_ARRAY, ranges, );
/** 根据H,S两个平面数据统计直方图 */
cvCalcHist( planes, hist, , ); /** 获取直方图统计的最大值,用于动态显示直方图 */
float max_value;
cvGetMinMaxHistValue( hist, , &max_value, , ); /** 设置直方图显示图像 */
int height = ;
int width = (h_bins*s_bins*);
IplImage* hist_img = cvCreateImage( cvSize(width,height), , );
cvZero( hist_img ); /** 用来进行HSV到RGB颜色转换的临时单位图像 */
IplImage * hsv_color = cvCreateImage(cvSize(,),,);
IplImage * rgb_color = cvCreateImage(cvSize(,),,);
int bin_w = width / (h_bins * s_bins);
for(int h = ; h < h_bins; h++)
{
for(int s = ; 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); /** 获得当前直方图代表的颜色,转换成RGB用于绘制 */
cvSet2D(hsv_color,,,cvScalar(h*.f / h_bins,s*.f/s_bins,,));
cvCvtColor(hsv_color,rgb_color,CV_HSV2BGR);
CvScalar color = cvGet2D(rgb_color,,); cvRectangle( hist_img, cvPoint(i*bin_w,height),
cvPoint((i+)*bin_w,height - intensity),
color, -, , );
}
} return hist_img; }
OpenCV颜色直方图的更多相关文章
- OpenCV 实现颜色直方图
颜色直方图是在许多图像检索系统中被广泛采用的颜色特征.它所描述的是不同色彩在整幅图像中所占的比例,而并不关心每种色彩所处的空间位置,即无法描述图像中的对象或物体.颜色直方图特别适于描述那些难以进行自动 ...
- OpenCV成长之路(5):图像直方图的应用
正如第4篇文章所说的图像直方图在特征提取方面有着很重要的作用,本文将举两个实际工程中非常实用的例子来说明图像直方图的应用. 一.直方图的反向映射. 我们以人脸检测举例,在人脸检测中,我们第一步往往需要 ...
- [OpenCV] Image Processing - Grayscale Transform
"每个像素的输出值只取决于其输入值" 重难点:Histogram equalization 参考:笑得很甜 http://blog.csdn.net/xiaowei_cqu/art ...
- 【转】opencv检测运动物体的基础_特征提取
特征提取是计算机视觉和图像处理中的一个概念.它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征.特征提取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点.连续的曲线或者连 ...
- OpenCV成长之路:图像直方图的应用
OpenCV成长之路:图像直方图的应用 2014-04-11 13:57:03 标签:opencv 图像 直方图 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否 ...
- OpenCV探索之路(二十八):Bag of Features(BoF)图像分类实践
在深度学习在图像识别任务上大放异彩之前,词袋模型Bag of Features一直是各类比赛的首选方法.首先我们先来回顾一下PASCAL VOC竞赛历年来的最好成绩来介绍物体分类算法的发展. 从上表我 ...
- opencv批处理提取图像的特征
____________________________________________________________________________________________________ ...
- [OpenCV-Python] OpenCV 中的图像处理 部分 IV (五)
部分 IVOpenCV 中的图像处理 OpenCV-Python 中文教程(搬运)目录 22 直方图 22.1 直方图的计算,绘制与分析目标 • 使用 OpenCV 或 Numpy 函数计算直方图 • ...
- [OpenCV] Image Processing - Grayscale Transform & Histogram
颜色直方图 首先,先介绍一些Hist的基本使用. Ref:[OpenCV]数字图像灰度直方图 官方文档:https://docs.opencv.org/trunk/d8/dbc/tutorial_hi ...
随机推荐
- centos'的yum安装php的memcache扩展
centos'的yum安装php的memcache扩展 博客分类: linux 让php能使用memcached服务的扩展有两种:memcache 和 memcached 1. 先安装libmem ...
- css 父层 透明 子层不透明Alpha
html代码 <div class="user2-register-bg"> <div class="user2-register-con"& ...
- Redis总结(三)Redis 的主从复制
接着上一篇,前面两篇我总结了<Redis总结(一)Redis安装>和<Redis总结(二)C#中如何使用redis> 所以这一篇,会讲讲Redis 的主从复制以及C#中如何调用 ...
- 项目管理知识框架PMBOK(文字版)
项目管理知识框架PMBOK 项目整体管理[I](Integration) 1. 制定项目章程(Develop Project Charter) 2. 制定项目初步范围说明书(Develop Pre ...
- Robot Framework--12 RFS+AutoItLibrary测试web对话框
转自:http://blog.csdn.net/tulituqi/article/details/21871247 Selenium2library在我们实际测试web页面的时候基本上已经够用了,不过 ...
- Class.forName()用法详解
Class.forName()用法详解 标签: classjvmjdbc数据库documentationjava 2012-03-29 09:39 40414人阅读 评论(8) 收藏 举报 分类: ...
- Joomla![1.5-3.4.5]反序列化远程代码执行EXP(直接写shell)
Usage:x.py http://xxx.com # coding=utf-8# author:KuuKi# Help: joomla 1.5-3.4.5 unserialize remote co ...
- Java %c0%ae 安全模式绕过漏洞
漏洞类型:安全模式绕过漏洞 漏洞描述:在Java端"%c0%ae"解析为"\uC0AE",最后转义为ASCCII低字符-".".通过这个方法 ...
- 工具,如何去掉百度编辑器 ueditor 元素路径、字数统计等
去掉如下截图: 在百度编辑器 ueditor 根目录下: ueditor.config.js 文件中 搜索并将参数elementPathEnabled设置成false即可 常用功能开关如下: ,ele ...
- 在Razor中如何引入命名空间?("import namespace in razor view") 【转】
原文链接 找了半天,原来如此: 在aspx中: <%@ Import Namespace = "Martian.Areas.SFC.Models" %><%@ I ...