Oopencv学习心得(二)——绘制直方图
来源:互联网 发布:linux 上传文件命令 编辑:程序博客网 时间:2024/06/06 17:18
在图像处理中我们会常常遇到绘制直方图,其中包括颜色直方图、梯度直方图。直方图广泛应用与许多计算机视觉应用中,通过标记帧与帧之间的边缘和颜色的统计变化,直方图用于检测场景变化。通过对每个兴趣点设置一个有相近特征的直方图作为标记,用以确定图像中的兴趣点。简单说来,直方图就是对数据进行统计,将统计值组织到之前组织好一系列的bin中。bin的分配自己设定,其中bin中的数值为从数据中计算出的特征统计量,直方图实际上是一个方便表示图像特征的手段。
在opencv中讲解里直方图的应用实例:
在程序开始首先定义变量,以及结构体。
如:
/*****************************直方图绘制初始化**********************/CvHistogram *hist=0;//创建多维直方图int dims=48;//在直方图中dims大小,越大精度越高。float arrnge[]={0,180};//空间坐标系中像素范围float *parrnge=arrnge;//用来初始化 hist。IplImage *image=0,*hsv=0,*hue/*色调*/=0,*mask/*掩码*/=0,*backproject/*幕后影像*/=0,*histimg=0;//直方图;之后是进入视频图像采集阶段,第一次采集图像,则为相应的图像分配空间。
if (!image){image=cvCreateImage(cvGetSize(pFrame),8,3);image->origin=pFrame->origin;hsv=cvCreateImage(cvGetSize(pFrame),8,3);hue=cvCreateImage(cvGetSize(pFrame),8,1);//色彩创建空间为单通道图像mask=cvCreateImage(cvGetSize(pFrame),8,1);//分配掩码图像空间backproject=cvCreateImage(cvGetSize(pFrame),8,1);//分配反向投影图空间histimg=cvCreateImage(cvSize(320,240),8,3);cvZero(histimg);//将背景设为灰度空间hist=cvCreateHist(1,&dims,CV_HIST_ARRAY,&parrnge,1);//计算直方图,分配建立直方图空间}
采集到图像分配空间之后,便是在计算直方图,以及前期处理得到相关感兴趣区域的直方图
cvCopy(pFrame,image,0);cvCvtColor(image,hsv,CV_BGR2HSV);//转化颜色空间cvInRangeS(hsv,cvScalar(0,30,30),cvScalar(180,256,180),mask);//制作掩码空间,只处理H:0~180,S:30~256,v:30~180.cvSplit(hsv,hue,0,0,0);//取得H分量。cvSetImageROI(hue,rect);//得到选择区域,设置原选择框cvSetImageROI(mask,rect);//得到选择区域,设置mask选择框cvCalcHist(&hue,hist,0,mask);//得到选择框内且满足掩码班内的直方图cvGetMinMaxHistValue(hist,0,&max_val,0,0);//只找最大值cvConvertScale(hist->bins,hist->bins,max_val?255./max_val:0.,0);//缩放bin到区间[0,255],如果大于0,则压缩。cvResetImageROI(hue);cvResetImageROI(mask);float bin_w = histimg->width / dims; // hdims: 条的个数,则 bin_w 为条的宽度
最后便是画直方图。
// 画直方图for( int i = 0; i < dims; i++ ){int val = cvRound( cvGetReal1D(hist->bins,i)*histimg->height/255 );//float bin_val=cvQueryHistValue_1D(hist,0);CvScalar color=hsv2rgb(i*180.f/dims);cvRectangle( histimg, cvPoint(i*bin_w,histimg->height),cvPoint((i+1)*bin_w,histimg->height - val),color, -1, 8, 0 );//画直方图到图像空间}相关程序代码在:
- Oopencv学习心得(二)——绘制直方图
- 学习OpenCV——绘制彩色直方图(HSV2BGR)
- opencv——灰度直方图的绘制
- OpenCV入门(二十一)-- 绘制彩色图像的直方图
- OpenCV2马拉松第8圈——绘制直方图
- Opencv学习笔记——绘制图像的像素直方图
- 绘制直方图
- 绘制直方图
- 绘制直方图
- 绘制直方图
- 直方图与直方图绘制
- opencv学习笔记(二十九)绘制一个RGB三色直方图
- 《卓有成效的管理者》——学习心得(二)
- OpenLayers3 学习心得(二)——开发配置
- 绘制灰度直方图(OpenCV + Java)
- Axure学习心得二——中继器
- 学习心得(二)
- ExtJS学习心得(二)
- Jelly讲座录音+PPT+推荐资料!
- spring在web.xml中的配置
- SQL Server数据库性能优化之SQL语句篇
- 算法---->动态规划(一)
- java实现二叉树及遍历
- Oopencv学习心得(二)——绘制直方图
- DBA生存之四大守则
- [备考心经]Jelly117分经验分享之——备考心态调整
- IDA反汇编/反编译静态分析iOS模拟器程序(二)加载文件与保存数据库
- 关于MFC对话框不显示或出错的问题解决总结(更新中。。。)
- 一道面试题:火车运煤问题
- 说透一级指针和二级指以及(void**)&在双链表中的应用
- 2013.05.14_C++primer笔记
- web.xml