庞峰Opencv学习(三)--灰度直方图
来源:互联网 发布:c语言谭浩强pdf下载 编辑:程序博客网 时间:2024/06/18 07:42
灰度直方图是一个帮助分析图像很有力的工具吧,今天学习了下,一天不敲代码就生疏啊- -
灰度直方图这个程序主要有几个函数和结构体先说一下:
1. CreateHIst
CvHistogram* cvCreateHist( int dims, int* sizes, int type, float** ranges=NULL, int uniform=1 );
dims代表直方图是几维的,本程序是一个一维直方图,即bins只由x坐标索引
sizes 代表有多少个bins
type有两种类型一是稠密数组CV_HIST_ARRAY和稀疏数组CV_HIST_TREE,这里由于是一维直方图我们选择稠密数组
ranges代表了bins中值得取值范围,这里我们的灰度值为0-255,所以选取0-255
uniform归一化标识,默认为1,标识x方向被等分为sizes个bins
2. CalcHist
void cvCalcHist( IplImage** image, CvHistogram* hist, int accumulate=0, const CvArr* mask=NULL );
image为输入图像s
hist为直方图指针
这里需要注意如果要计算的图像是多通道时,可以用多个单通道图来表示
#include "cv.h"#include "cxcore.h"#include "highgui.h"#include <stdio.h>IplImage* DisplayHist(CvHistogram* hist, float xscalar=1, float yscalar =1){float maxHist=0;cvGetMinMaxHistValue(hist, 0, &maxHist , 0 ,0);IplImage* histimg = cvCreateImage(cvSize(256*xscalar,64*yscalar),8 ,1);cvZero(histimg);//取出直方图中的灰度值,并进行归一化处理float currentVal=0;float nextVal=0;for (int i=0; i<255;i++){currentVal = cvQueryHistValue_1D(hist,i);nextVal = cvQueryHistValue_1D(hist,i+1);CvPoint pt[4];pt[1] = cvPoint(i*xscalar, 64*yscalar);pt[2] = cvPoint((i+1)*xscalar, 64*yscalar);pt[3] = cvPoint((i+1)*xscalar, (64-(nextVal/maxHist)*64)*yscalar);pt[4] = cvPoint(i*xscalar, (64-(currentVal/maxHist)*64)*yscalar);//填充凸多边形int npts = 5;CvPoint pts[5];pts[0]=pt[1];pts[1]=pt[2];pts[2]=pt[3];pts[3]=pt[4];pts[4]=pt[1];cvFillConvexPoly(histimg,pts,npts,cvScalar(255));//白色填充}return histimg;}void main(){IplImage* src = cvLoadImage("lena.jpg");cvNamedWindow("src");cvShowImage("src",src);CvHistogram* hist;int sizes = 256;//有256个binsint dims = 1;//一维直方图float range[] = {0,255}; //灰度图深度0-255float* ranges[] = {range};hist = cvCreateHist(dims, &sizes, CV_HIST_ARRAY/*稠密数组*/,ranges,1);cvClearHist(hist);IplImage* bimg = cvCreateImage(cvGetSize(src), 8 , 1);IplImage* gimg = cvCreateImage(cvGetSize(src), 8 , 1);IplImage* rimg = cvCreateImage(cvGetSize(src), 8 , 1);cvSplit(src,bimg,gimg,rimg,NULL);cvCalcHist(&bimg,hist,0,0);IplImage *bhist = DisplayHist(hist);cvNamedWindow("b");cvShowImage("b",bhist);cvClearHist(hist);cvCalcHist(&gimg,hist,0,0);IplImage *ghist = DisplayHist(hist);cvNamedWindow("g");cvShowImage("g",ghist);cvClearHist(hist);cvCalcHist(&rimg,hist,0,0);IplImage *rhist = DisplayHist(hist);cvNamedWindow("r");cvShowImage("r",rhist);cvClearHist(hist);cvWaitKey(0);cvReleaseImage(&src);cvReleaseImage(&bimg);cvReleaseImage(&gimg);cvReleaseImage(&rimg);}
0 0
- 庞峰Opencv学习(三)--灰度直方图
- opencv学习_6 (灰度直方图)
- opencv学习_6 (灰度直方图)
- opencv学习笔记(九)-灰度直方图
- opencv绘制灰度直方图
- 【OpenCV】数字图像灰度直方图
- opencv 灰度直方图
- opencv绘制灰度直方图
- OpenCV 灰度直方图
- 【OpenCV】数字图像灰度直方图
- 【OpenCV】数字图像灰度直方图
- OpenCV数字图像灰度直方图
- 【OpenCV】数字图像灰度直方图
- 【OpenCV】数字图像灰度直方图
- 【OpenCV】数字图像灰度直方图
- OpenCV--数字图像灰度直方图
- 【OpenCV】数字图像灰度直方图
- 【OpenCV】数字图像灰度直方图
- 七头猪小组新手训练场第3弹
- 砖块阴影字Bricks
- Photoshop学习笔记
- WiKi上关于USRP使用的一些问答(一)
- 求素数
- 庞峰Opencv学习(三)--灰度直方图
- bat实例 lean code
- 其实,树要是动起来也很惊悚
- snapchat服务器被黑
- Makefile中的常用函数
- OpenCV 2.4+ C++ SVM介绍
- 环形选人问题
- java_easyui体系之DataGrid(3)
- 苹果收购高清连拍应用SnappyCam