opencv java灰度图像增强_OpenCV 图像增强算法 图像检测结果

这段代码演示了如何通过直方图变换增强图像的对比度,特别是针对单通道灰度图像。它首先统计图像中每个灰度级的像素数量,然后计算概率分布,接着应用变换将灰度值映射到0-255范围内。实验结果显示,经过处理的图像对比度得到了明显提高。
摘要由CSDN通过智能技术生成

本代码通过直方图变换增强了图像对比度,实现了单通道图像增强。将图像灰度阈值拉伸到0-255,图像检测结果见底部

Keywords: 图像增强 增强对比度 直方图变换

int ImageStretchByHistogram(IplImage *src1,IplImage *dst1)

/*************************************************

Function:      通过直方图变换进行图像增强,将图像灰度的域值拉伸到0-255

src1:              单通道灰度图像

dst1:              同样大小的单通道灰度图像

*************************************************/

{

assert(src1->width==dst1->width);

double p[256],p1[256],num[256];

memset(p,0,sizeof(p));

memset(p1,0,sizeof(p1));

memset(num,0,sizeof(num));

int height=src1->height;

int width=src1->width;

long wMulh = height * width;

//statistics

for(int x=0;xwidth;x++)

{

for(int y=0;y height;y++){

uchar v=((uchar*)(src1->imageData + src1->widthStep*y))[x];

num[v]++;

}

}

//calculate probability

for(int i=0;i<256;i++)

{

p[i]=num[i]/wMulh;

}

//p1[i]=sum(p[j]); j<=i;

for(int i=0;i<256;i++)

{

for(int k=0;k<=i;k++)

p1[i]+=p[k];

}

// histogram transformation

for(int x=0;xwidth;x++)

{

for(int y=0;y height;y++){

uchar v=((uchar*)(src1->imageData + src1->widthStep*y))[x];

((uchar*)(dst1->imageData + dst1->widthStep*y))[x]= p1[v]*255+0.5;

}

}

return 0;

}

void CCVMFCView::OnImageAdjustContrast()

{

if(workImg->nChannels>1)

OnColorToGray();

Invalidate();

dst=cvCreateImage(cvGetSize(workImg),workImg->depth,workImg->nChannels);

ImageStretchByHistogram(workImg,dst);

m_dibFlag=imageReplace(dst,&workImg);

Invalidate();

}

Experiment Result:

fff8d4a33e553188a9a4fd3348339060.png

原图灰度化

77530745c58b47ccec141fdb5f772f51.png

检测结果1

9ce89d51a94b782cbc5bf52b37e2daa6.png

灰度化并增强对比度

b98eae8ddf2c69af7075bf511959f8e0.png

检测结果2

--------------------------------------分割线 --------------------------------------

--------------------------------------分割线 --------------------------------------

OpenCV的详细介绍:请点这里

OpenCV的下载地址:请点这里

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值