颜色直方图是在许多图像检索系统中被广泛采用的颜色特征。它所描述的是不同色彩在整幅图像中所占的比例,而并不关心每种色彩所处的空间位置,即无法描述图像中的对象或物体。颜色直方图特别适于描述那些难以进行自动分割的图像。
OpenCV对颜色直方图进行统计的代码如下所示,在图像检索,镜头分割等领域使用的还是比较多的。
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace std;
int main( int argc, char** argv )
{
IplImage * src= cvLoadImage("F:\\test3.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 };
/** 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);
/** 获得当前直方图代表的颜色,转换成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", 1 );
cvShowImage( "H-S Histogram", hist_img );
cvWaitKey(0);
}
原文地址:http://wiki.opencv.org.cn/index.php/图像颜色分布直方图
分享到:
相关推荐
基于OPENCV和VC的计算图像颜色直方图的小程序。
颜色直方图匹配算法实现 环境:opencv2.31,vs2008平台 绝对可用
包括特征提取的介绍以及实现代码,实现OpenCV特征提取,包括边缘、颜色直方;
它使用颜色直方图特征提取和 KNN 分类器来进行颜色预测。 使用方法: 1. 打开终端或命令提示符,进入代码所在目录。 2. 运行 python color_classifier.py 来启动摄像头颜色分类器。 3. 程序将会打开摄像头并捕获实时...
该代码已在vs2010编译通过,实现一幅图像的RGB三通道直方图显示在同一窗口中,希望对有需要的朋友有点帮助
自己编写的基于RGB颜色空间的直方图的匹配算法实现,大家一起学习!
用C++结合opencv实现提取图像的颜色直方图,并显示。
使用bof算法来提取图像特征,在corel数据集(10*100张图片)上实现以图搜图,即输入数据集中某一张图,在剩下的999张图里搜索最邻近的10张图。
使用opencv实现RGB空间到HSV空间的转换,并进行直方图均衡化
基于opencv实现的彩色直方图反向投影,性质超吊~赞赞赞
基于颜色直方图的图像分割,快速分割,实现灰度图像
本文介绍了python ...通常它用于寻找颜色直方图,其中两个特征是每个像素的色调和饱和度值。 有一个python样例(samples/python/color_histogram.py),用于查找颜色直方图。我们将尝试理解如何创建这样的彩色直方图
将RGB转化为HSV之后求的颜色直方图,运用opencv的库函数,对其进行了实现。
里面有每个算法实现的源码,都是实现过的,每个算法后面配有效果图。适合初学者,是本人学习时从教材及网上慢慢整理出来的,希望对大家有用。谢谢!
本文介绍了python OpenCV学习笔记直方图反向投影的实现,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/dc/df6/tutorial_py_histogram_backprojection.html...而颜色直方图比灰度直方图更受青睐,
使用VC6.0集成开发环境初步实现了基于图片轮廓和图片颜色直方图的图像检索系统;对于给定的例子图像,系统搜索指定目录并根据与例子图像的颜色直方图或轮廓相似性程度数值按升序排列相符合的
CAMSH IF T 算法是一种基于颜色直方图的目标跟踪算法 。在视频跟踪过程中 ,CAMS H IF T 算法利用选定目标的颜色直方图模型得到每帧图像的颜色投影图 ,并根据上一帧跟踪的结果自适应调整搜索窗口的位置和大小 , 得到...
本例采用opencv的随机森林对图像做分类,提取的是图像的颜色直方图,然后计算统计特征,采用csv文件存储图像特征。
OpenCV的图像匹配 ,利用 OpenCV 实现了根据颜色直方图和形状进行图像匹配的功能,能够对摄像头的实时图像和本地照片进...
OpenCV颜色特征提取包括:图像显示灰度直方图颜色直方图颜色矩颜色量化颜色相关向量颜色相关图更多详细的内容请查看Report.pdf