计算机视觉
图像处理

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;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:

原图灰度化

原图灰度化

检测结果1

检测结果1

灰度化并增强对比度

灰度化并增强对比度

检测结果2

检测结果2

转载注明来源:CV视觉网 » Opencv 图像增强算法 图像检测结果

分享到:更多 ()
扫描二维码,给作者 打赏
pay_weixinpay_weixin

请选择你看完该文章的感受:

0不错 0超赞 0无聊 0扯淡 0不解 0路过

评论 4

评论前必须登录!