#include <cv.h>
#include <highgui.h>
#include <cxcore.h>
#include <stdio.h>
#define HDIM 256
int main(int argc,char** argv)
{
IplImage *dst=0,*src=0;
CvHistogram *histogram;
CvHistogram *HistEqualization;
IplImage *histOriginal;//原图像的直方图
IplImage *HistEquAfter;//均衡化后直方图
float HistogramRange1[2]={0,255};
float *HistogramRange[1]={&HistogramRange1[0]};
int n=HDIM;
double nn0[HDIM];
int srcnn00[HDIM];
uchar T0[HDIM];
CvMat *T_mat0;
int i=0;
int sum = 0; //sum of pixels of the source image
double val0=0;
int val1=0;
if((src=cvLoadImage("4.jpg",0)) == NULL) // force to gray image
{
printf("Read Image Error!");
return -1;
}
//原图像的直方图
histOriginal = cvCreateImage(cvSize(300,400),8,3);
histOriginal->origin=1;
histogram = cvCreateHist(1,&n,CV_HIST_ARRAY,HistogramRange,1);
cvCalcHist(&src,histogram,0,0);
// Compute intensity transformation
sum = src->height * src->width;
for( i = 0; i < n; i++ )
{
val0 = val0 + cvGetReal1D (histogram->bins, i);
nn0[i]=val0;
T0[i] = (uchar) (255*nn0[i]/sum); // range is [0,255]
srcnn00[i]=(int)(nn0[i]*255/sum);
cvLine(histOriginal,cvPoint(i,0),cvPoint(i,(int)(cvQueryHistValue_1D(histogram,i)/3)),CV_RGB(127,127,127));
}
// 直方图均衡化
dst = cvCloneImage(src);
T_mat0 = cvCreateMatHeader(1,256,CV_8UC1);
cvSetData(T_mat0,T0,src->width );
cvLUT( src, dst, T_mat0);
//均衡化后的直方图
HistEquAfter = cvCreateImage(cvSize(300,400),8,3);
HistEquAfter->origin=1;
HistEqualization = cvCreateHist(1,&n,CV_HIST_ARRAY,HistogramRange,1);
cvCalcHist(&dst,HistEqualization,0,0);
for (i=0;i<n;i++)
{
cvLine(HistEquAfter,cvPoint(i,0),cvPoint(i,(int)(cvQueryHistValue_1D(HistEqualization,i)/3)),CV_RGB(127,127,127));
}
cvNamedWindow( "source", 1 );
cvNamedWindow( "HistEquImage", 1 );
cvNamedWindow( "S_Histogram", 1 );
cvNamedWindow( "HistEqualization", 1 );
cvShowImage( "source", src );//原图像
cvShowImage( "HistEquImage", dst );//均衡化后图像
cvShowImage("S_Histogram",histOriginal);//原图像直方图
cvShowImage("HistEqualization",HistEquAfter);//均衡化后直方图
cvWaitKey(-1);
cvReleaseImage( &src );
cvReleaseImage( &dst );
cvReleaseImage(&histOriginal);
cvReleaseImage(&HistEquAfter);
cvReleaseHist ( &histogram);
cvReleaseHist(&HistEqualization);
cvDestroyWindow("source");
cvDestroyWindow("HistEquImage");
cvDestroyWindow("S_Histogram");
cvDestroyWindow("HistEqualization");
return 0;
}
haona002
- 粉丝: 0
- 资源: 1
最新资源
- java版考试管理系统(前后端分离、springboot、vue、mysql)
- STM32F103C8T6驱动步进电机
- Python+OpenCV魔方识别系统(源码和部署教程).zip
- Video-2024-10-05下午-线程同步1.wmv
- 15个前端数据大屏展示图+源代码下载
- vue大屏显示数据分析源码
- 基于非下采样小波包分析的轴承故障诊断 代码运行环境为MATLAB r2021b,非下采样小波包变执行信号的等带宽精细滤波,而不是离散小波变中的较粗糙的倍频程滤,而且很好的缓解了小波包变中的时间分辨
- Nessus2025.01.06
- 松下 WV-S2236L WV-S2136L WV-S2136 网络摄像机 安装指南.pdf
- 用户手册计数器 计时器CX系列.pdf
- llc半桥变器多种控制方式仿真模型,包括 变频控制(PFM) PWM控制(占空比控制) 滞环控制(bang-bang控制) 自抗扰控制(采用的是一阶ADRC模型) 等控制方式的半桥llc谐振变器仿真模
- 微博热搜数据可视化分析系统技术框架python + flask web + mysql
- CLASSIC(WV)旋转喷嘴用户手册.pdf
- Schneider Electric Industries MODBUS TCP Master 驱动程序 GP-Pro EX 控制器 PLC 连接手册.pdf
- Video-2024-10-05下午-线程同步2.wmv
- 饥饿游戏搜索HGS优化算法对BP的权值和阈值做优化,建立多分类和二分类预测模型 程序内注释详细,可学习性强 直接替数据就可以用 程序语言为matlab 同时接优化算法和机器学习算法结合的定制模
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页