设为首页 加入收藏

TOP

OpenCV图像特征之颜色直方图
2014-11-23 22:15:51 来源: 作者: 【 】 浏览:25
Tags:OpenCV 图像 特征 颜色 方图

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。


#include
#include
#include


using namespace cv;


#include


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< return 0;
}


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



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


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux编程---套接字 下一篇Java 文件读写的实用工具

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: