📄 histeq.c
字号:
/*//////////////////////////////////////////////////
直方图均衡化算法可以归一化图象的亮度,并增强图象的对比度
源程序给的是按公式给的算法
//////////////////////////////////////////////////*/
#include "cv.h"#include "highgui.h"#define HDIM 256 // bin of HIST, default = 256int main( int argc, char** argv ) { IplImage *src = 0, *dst = 0,*dst1 =0; CvHistogram *hist = 0; int n = HDIM; double nn[HDIM]; uchar T[HDIM]; CvMat *T_mat; int x; int sum = 0; // sum of pixels of the source image 图像中象素点的总和 double val = 0; // if( argc != 2 || (src=cvLoadImage(argv[1], 0)) == NULL) // force to gray image// return -1;
char *filename= "rice.png";
if((src=cvLoadImage(filename, 0)) == NULL)
return -1; cvNamedWindow( "source", 1 ); cvNamedWindow( "result", 1 );
cvNamedWindow( "result1", 1 ); // 计算直方图 hist = cvCreateHist( 1, &n, CV_HIST_ARRAY, 0, 1 ); cvCalcHist( &src, hist, 0, 0 ); // Create Accumulative Distribute Function of histgram val = 0; for ( x = 0; x < n; x++) { val = val + cvGetReal1D (hist->bins, x); nn[x] = val; } // 归一化直方图 sum = src->height * src->width; for( x = 0; x < n; x++ ) { T[x] = (uchar) (255 * nn[x] / sum); // range is [0,255] } // Using look-up table to perform intensity transform for source image dst = cvCloneImage( src );
dst1 = cvCloneImage( src ); T_mat = cvCreateMatHeader( 1, 256, CV_8UC1 ); cvSetData( T_mat, T, 0 ); // 直接调用内部函数完成 look-up-table 的过程 cvLUT( src, dst, T_mat );
//直接调用直方图均衡化函数
cvEqualizeHist(src,dst1); cvShowImage( "source", src ); cvShowImage( "result", dst );
cvShowImage( "result1", dst1 ); cvWaitKey(0); cvDestroyWindow("source"); cvDestroyWindow("result");
cvDestroyWindow("result1"); cvReleaseImage( &src ); cvReleaseImage( &dst );
cvReleaseImage( &dst1 ); cvReleaseHist ( &hist ); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -