直方图均衡化代码

注:代码中使用可openCV。
#include
#include "cv.h"
#include "highgui.h"
using namespace std;

//直方图均衡化
int main()
{
IplImage *src,*dst;
IplImage *srcPrj,*dstPrj;
int width,height,widthStep;
int prjheight;
int histogram[256]={0};
int i,j;
uchar *pdata,*pdst;
src = cvLoadImage("pic.jpg",0); //读取灰度图
dst = cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
width = src->width;height = src->height;widthStep = src->widthStep;
pdata = (uchar*)src->imageData;
for(i=0;i
for(j=0;j
histogram[pdata[i*widthStep+j]]++; //统计灰度直方图
}
}
prjheight = height*20;
srcPrj = cvCreateImage(cvSize(1024,prjheight),IPL_DEPTH_8U,1);
cvZero(srcPrj); //清零
for(i=0;i<1024;i++){
for(j=prjheight-1;j>prjheight-1-histogram[i/4] && j>=0;j--)
srcPrj->imageData[j*1024+i] = 255;
}
cvSaveImage("srcPrj.bmp",srcPrj);

//下面进行直方图均衡
double map[256];int sum=0;
//计算映射表
for(i=0;i<256;i++){
sum += histogram[i];
map[i] = (double)sum*255/(width*height) + 0.5;
}
//输出数据赋值
pdst = (uchar*)dst->imageData;
for(i=0;i
for(j=0;j
pdst[i*widthStep+j] = map[pdata[i*widthStep+j]];
}
}
cvSaveImage("dst.bmp",dst); //保存直方图均衡化后的图像
//计算灰度直方图
memset(histogram,0,sizeof(int)*256);
for(i=0;i
for(j=0;j
histogram[pdst[i*widthStep+j]]++; //统计灰度直方图
}
}
// prjheight = height*width/8;
dstPrj = cvCreateImage(cvSize(1024,prjheight),IPL_DEPTH_8U,1);
cvZero(dstPrj); //清零
for(i=0;i<1024;i++){
for(j=prjheight-1;j>prjheight-1-histogram[i/4] && j>=0;j--)
dstPrj->imageData[j*1024+i] = 255;
}
cvSaveImage("dstPrj.bmp",dstPrj);
cvReleaseImage(&src);
cvReleaseImage(&dst);
cvReleaseImage(&srcPrj);
cvReleaseImage(&dstPrj);
return 0;
}
原图及其灰度直方图:
直方图均衡化代码  直方图均衡化代码
直方图均衡化后的图像及其灰度直方图:
直方图均衡化代码  直方图均衡化代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值