OpenCV学习之图像的直方图
2017-08-04 11:59
399 查看
灰度直方图的定义
灰度直方图是灰度级的函数,描述图像中该灰度级的像素个数(或该灰度级像素出现的频率):其横坐标是灰度级,纵坐标表示图像中该灰度级出现的个数(频率)。
数据结构
创建直方图cvCreateHist()
计算直方图CalcHist()
用OpenCV生成图像的一维直方图
灰度直方图是灰度级的函数,描述图像中该灰度级的像素个数(或该灰度级像素出现的频率):其横坐标是灰度级,纵坐标表示图像中该灰度级出现的个数(频率)。
数据结构
typedef struct CvHistogram { int type; CvArr* bins; //存放每个灰度级数目的数组指针 float thresh[CV_MAX_DIM][2]; //均匀直方图 float** thresh2; //非均匀直方图 CvMatND mat; //直方图数组的内部数据结构 } CvHistogram;
创建直方图cvCreateHist()
CvHistogram* cvCreateHist( int dims, //直方图维数 int* sizes,//直翻图维数尺寸 int type, //直方图的表示格式 float** ranges=NULL, //图中方块范围的数组 int uniform=1 //归一化标识 );
计算直方图CalcHist()
void cvCalcHist( IplImage** image, //输入图像(也可用CvMat**) CvHistogram* hist, //直方图指针 int accumulate=0, //累计标识。如果设置,则直方图在开始时不被清零。 const CvArr* mask=NULL //操作 mask, 确定输入图像的哪个象素被计数 );
用OpenCV生成图像的一维直方图
//图像的直方图 #include "cv.h" #include "highgui.h" int main() { IplImage * src = cvLoadImage("Lena.tiff",1); IplImage* gray_plane = cvCreateImage(cvGetSize(src), 8, 1); cvCvtColor(src, gray_plane, CV_BGR2GRAY); int hist_size = 256; //直方图尺寸 int hist_height = 256; float range[] = { 0,255 }; //灰度级的范围 float* ranges[] = { range }; //创建一维直方图,统计图像在[0 255]像素的均匀分布 CvHistogram* gray_hist = cvCreateHist(1, &hist_size, CV_HIST_ARRAY, ranges, 1); //计算灰度图像的一维直方图 cvCalcHist(&gray_plane, gray_hist, 0, 0); //归一化直方图 cvNormalizeHist(gray_hist, 1.0); int scale = 2; //创建一张一维直方图的“图”,横坐标为灰度级,纵坐标为像素个数(*scale) IplImage* hist_image = cvCreateImage(cvSize(hist_size*scale, hist_height), 8, 3); cvZero(hist_image); //统计直方图中的最大直方块 float max_value = 0; cvGetMinMaxHistValue(gray_hist, 0, &max_value, 0, 0); //分别将每个直方块的值绘制到图中 for (int i = 0; i<hist_size; i++) { float bin_val = cvQueryHistValue_1D(gray_hist, i); //像素i的概率 int intensity = cvRound(bin_val*hist_height / max_value); //要绘制的高度 cvRectangle(hist_image, cvPoint(i*scale, hist_height - 1), cvPoint((i + 1)*scale - 1, hist_height - intensity), CV_RGB(255, 255, 255)); } cvNamedWindow("GraySource", 1); cvShowImage("GraySource", gray_plane); cvNamedWindow("H-S Histogram", 1); cvShowImage("H-S Histogram", hist_image); cvWaitKey(0); }
相关文章推荐
- OpenCV 学习(计算图像的直方图)
- OpenCV学习之六: 使用方向梯度直方图估计图像旋转角度
- opencv2 学习第7天 RGB图像的直方图 & 灰度图的直方图
- opencv学习之(五)-直方图计算和绘制图像直方图
- 我的OpenCV学习笔记(14):用直方图对比完成基于内容的图像检索
- opencv学习笔记---图像直方图
- OpenCV学习笔记(八)——图像处理之直方图ImgProc
- OpenCV 2 学习笔记(21): 使用直方图比较检索相似图像
- Python OpenCV学习笔记之:图像直方图反向投影(backprojection)原理简单实现
- 基础学习笔记之opencv(19):有关图像序列的直方图计算
- Opencv Python版学习笔记(一)图像直方图
- OpenCV 2 学习笔记(15): 绘制图像直方图
- Python OpenCV学习笔记之:图像直方图反向投影
- OpenCV学习之六: 使用方向梯度直方图估计图像旋转角度
- 【OpenCV学习笔记 017】图像颜色分布直方图
- Python OpenCV学习笔记之:计算彩色图像各通道的直方图及图像区域直方图
- OpenCV学习21--图像直方图
- OpenCV2学习笔记(二):图像的直方图
- Python OpenCV学习笔记之:灰度图像的直方图计算
- opencv学习之(五)-直方图计算和绘制图像直方图