本文主要是介绍Opencv 图像增强算法 图像检测结果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本code通过直方图变换增强了图像对比度,实现了单通道图像增强。将图像灰度阈值拉伸到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;x<src1->width;x++)
- {
- for(int y=0;y<src1-> 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;x<src1->width;x++)
- {
- for(int y=0;y<src1-> 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();
- }
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;x<src1->width;x++)
{
for(int y=0;y<src1-> 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;x<src1->width;x++)
{
for(int y=0;y<src1-> 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:
原图灰度化
检测结果1
灰度化并增强对比度
检测结果2
这篇关于Opencv 图像增强算法 图像检测结果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!