图像特征之颜色直方图

OpenCV之颜色空间:

颜色空间RGB(Red 红色,Green 绿色,Blue 蓝色)

R的取值范围:0-255

G的取值范围:0-255

B的取值范围:0-255

颜色空间HSV (Hue 色相,Saturation 饱和度,intensity 亮度)

H的取值范围:0-179

S的取值范围:0-255

V的取值范围:0-255

颜色空间HLS (Hue 色相,lightness 亮度,Saturation 饱和度)

H的取值范围:0-179

L的取值范围:0-255

S的取值范围:0-255

—————————————————————————————————————————————————————

知道了一些经常使用的颜色空间各个通道的像素的取值范围,我们以下讨论颜色直方图

一维直方图:

比方,我们仅仅计算上图S通道的直方图,并有30个bin。

<span style="font-size:18px;">#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>

using namespace cv;

#include<iostream>

using namespace std;
int main(int argc ,char** argv)
{
	Mat src,hsv;
	if(argc != 2 || !(src = imread(argv[1],1)).data || src.channels() != 3)
		return -1;

	//颜色空间的转换BGR转HSV
	cvtColor(src,hsv,CV_BGR2HSV);

	//把H通道分为30个bin,把S通道等分为32bin
	int hbins  = 30;
	//int sbins = 32;
	//int histSize[] = {hbins,sbins};
	int histSize[] = {hbins};
	//H的取值范围 0-179
	float hranges [] = {0,180};
	//S的取值范围 0-255
	//float sranges [] ={0,255};
	//const float* ranges [] = {hranges,sranges};
	const float* ranges [] = {hranges};
	MatND hist;
	//我们依据图像第一个通道一维直方图
	int channels[] = {0};
	calcHist(&hsv,1,channels,Mat(),hist,1,histSize,ranges,true,false);

	//输出直方图
	cout<<hist<<endl;
	return 0;
}</span>

输出结果,肯定一个30维的向量:

解释:第一个数60571,就是代表H在[0,5]之间的像素点的个数,第二个数12194就是代表H在[6,11]之间的像素点的个数。

—————————————————————————————————————————————————————

二维直方图:

<span style="font-size:18px;"><span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;">#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>

using namespace cv;

#include<iostream>

using namespace std;
int main(int argc ,char** argv)
{
	Mat src,hsv;
	if(argc != 2 || !(src = imread(argv[1],1)).data || src.channels() != 3)
		return -1;

	//颜色空间的转换BGR转HSV
	cvtColor(src,hsv,CV_BGR2HSV);

	//把H通道分为30个bin,把S通道等分为32bin
	int hbins  = 5;
	int sbins = 4;
	int histSize[] = {hbins,sbins};

	//H的取值范围 0-179
	float hranges [] = {0,180};
	//S的取值范围 0-255
	float sranges [] ={0,256};
	const float* ranges [] = {hranges,sranges};

	MatND hist;
	//我们依据图像第一个通道和第二通道,计算二维直方图
	int channels[] = {0,1};
	calcHist(&hsv,1,channels,Mat(),hist,2,histSize,ranges,true,false);

	//输出直方图
	cout<<hist<<endl;
	return 0;
}</span></span></span>

我们以上图为例,输出的二维直方图为:

如今我们来解释一下,这是一个5行4列二维直方图,第一行第一列的128239,代表H和S的数值在[0,35]x[0,63],第二行第一列的18585代表H和S的值在[36,71]x[0,63],依次类推,怎么验证呢?我们仅仅须要把上面的程序,改几个数,比方我们仅仅计算H和S的值在[36,71]x[0,63]的直方图:

<span style="font-size:18px;">#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>

using namespace cv;

#include<iostream>

using namespace std;
int main(int argc ,char** argv)
{
	Mat src,hsv;
	if(argc != 2 || !(src = imread(argv[1],1)).data || src.channels() != 3)
		return -1;

	//颜色空间的转换BGR转HSV
	cvtColor(src,hsv,CV_BGR2HSV);

	//把H通道分为30个bin,把S通道等分为32bin
	int hbins  = 1;
	int sbins = 1;
	int histSize[] = {hbins,sbins};

	//H的取值范围 0-179
	float hranges [] = {36,72};
	//S的取值范围 0-255
	float sranges [] ={0,64};
	const float* ranges [] = {hranges,sranges};

	MatND hist;
	//我们依据图像第一个通道和第二通道,计算二维直方图
	int channels[] = {0,1};
	calcHist(&hsv,1,channels,Mat(),hist,2,histSize,ranges,true,false);

	//输出直方图
	cout<<hist<<endl;
	return 0;
}</span>

输出结果:

________________________________________________________________________________________________________________________________

理解了简单的颜色直方图,把颜色直方图作为一张图片简单的特征,做一个简单的图像检索。

时间: 2024-12-18 01:07:54

图像特征之颜色直方图的相关文章

【综述】(中科院)樊彬老师-“局部图像特征描述概述”

[综述](中科院)樊彬老师-“局部图像特征描述概述” 这次我们荣幸地邀请到中国科学院自动化研究所的樊彬老师为我们撰写图像特征描述符方面的最新综述.樊彬老师在图像特征描述方面已连续发表了包括TPAMI.PR.ICCV.CVPR在内的多篇高质量论文.他的个人主页为:http://www.sigvc.org/bfan/ 以后我们将持续邀请国内外众多老师做最新的视觉计算专业综述报告,如特征提取和描述.稀疏表达.人体跟踪.三维衣服布料动画.轻量级Web3D等,并陆续在学术论坛上发布.各位老师会尽量使综述通

图像特征提取方法:Bag-of-words

Bag-of-words简介 最初的Bag-of-words ,也叫做"词袋",在信息检索中,Bag-of-words model假定对于一个文本,忽略其词序和语法,句法,将其仅仅看做是一个词集合,或者说是词的一个组合,文本中每个词的出现都是独立的,不依赖于其他词是否出现. 应用于文本的BoW简单实例 John likes to watch movies. Mary likes too. John also likes to watch football games. 根据上述两句话中

【遥感专题系列】微波遥感(三、SAR图像特征)

SAR是主动式侧视雷达系统,且成像几何属于斜距投影类型.因此SAR图像与光学图像在成像机理.几何特征.辐射特征等方面都有较大的区别.在进行SAR图像处理和应用前,需要了解SAR图像的基本特征. 本文主要包括: 成像散射特征 SAR几何特征 SAR图像特征   1.成像散射特征 SAR图像上的信息是地物目标对雷达波束的反映,主要是地物目标的后向散射形成的图像信息.反映SAR图像信息的灰度值主要受后向散射的影响,而影响后向散射的主要因素分为两大类: 雷达系统的工作参数:主要包括雷达传感器的工作波长.

【图像算法】图像特征:GLCM灰度共生矩阵,纹理特征

[图像算法]图像特征:GLCM SkySeraph Aug 27th 2011  HQU Email:[email protected]    QQ:452728574 Latest Modified Date:Aug 27th 2011 HQU ------------------------------------------------------------------------------------------------------------------------------

图像特征知识结构

注:文章来自本人网站www.tcvpr.com,欢迎关注,持续更新图像处理,模式识别和机器学习相关内容,欢迎访问 开篇废话 个人网站用的感觉就是比CSDN舒服,哈哈,欢迎大家关注.经过前段时间对图像处理基础知识的学习,收获很多,最重要的是觉得坚持学习就会有收获,虽然还没找到工作..哈哈..不过我会继续努力的,弄了两天网站,欢迎大家访问. 学习了一些基础图像处理知识以后就要开始学习图像分析了,首先从图像的特征开始: 先总结下图像特征的分类,然后根据分类继续注意介绍,博客更新并没有时间节点,所以请耐

图像特征算子--之灰度共生矩阵原理分析与实现(八)

图像特征算子--之灰度共生矩阵原理分析与实现(八) [email protected] http://blog.csdn.net/kezunhai 灰度共生矩阵最早由Robert M.在提出,早期称为灰度空间依赖矩阵(Gray-Tone Spatial-Dependence Matrices),在其论文里,根据灰度空间依赖矩阵可以计算28种纹理特征,详细内容可以参考:Textural Features for Image Classification.由于纹理是由灰度分布在空间位置上反复出现而形

[转] 轻松使用多种预训练卷积网络抽取图像特征

选自GitHub,机器之心整理. 最近 GitHub 有一个非常有意思的项目,它可以使用多种预训练 TensorFLow 模型计算图像特征.对于每一个模型,它们都会输出最后的全连接层,即 AlexNet 的第七个全连接层.VGG_19 的第 8 个全连接层等.这些层级将最终抽取出图像的特征,并能进一步用于图像分类和聚类等.机器之心简要地介绍了该项目,并测试了使用Inception_V1预训练模型抽取图像特征. 项目地址:https://github.com/cameronfabbri/Compu

原来CNN是这样提取图像特征的。。。

对于即将到来的人工智能时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的领域,会不会感觉马上就out了?作为机器学习的一个分支,深度学习同样需要计算机获得强大的学习能力,那么问题来了,我们究竟要计算机学习什么东西?答案当然是图像特征了.将一张图像看做是一个个像素值组成的矩阵,那么对图像的分析就是对矩阵的数字进行分析,而图像的特征,就隐藏在这些数字规律中.深度学习对外推荐自己的一个很重要的点--深度学习能够自动提取特征.本文主要介绍卷积层提取特征的原理过程,文

Robotics Lab3 ——图像特征匹配、跟踪与相机运动估计

Robotics Lab3 --图像特征匹配.跟踪与相机运动估计 图像特征匹配 图像特征点 携带摄像头的机器人在运动过程中,会连续性地获取多帧图像,辅助其感知周围环境和自身运动.时间序列上相连的两幅或多幅图像,通常存在相同的景物,只是它们在图像中的位置不同.而位置的变换恰恰暗含了相机的运动,这时就需要相邻图像间的相似性匹配. 选取一大块图像区域进行运动估计是不可取的.已知图像在计算机内部是以数字矩阵的形式存储的,[如灰度图的每个元素代表了单个像素的灰度值].而对于点的提取和匹配较为方便,且和数字