Opencv 图像增强算法 图像检测结果

原创 2012年03月28日 10:58:03

本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();
}

Experiment Result:

原图灰度化

                                    原图灰度化

检测结果1

                                     检测结果1

灰度化并增强对比度

                                灰度化并增强对比度

检测结果2

                                   检测结果2


OpenCV学习笔记(一)对比度拉伸

分段线性是线性变换的分段形式,分段线性中的各个函数是任意设定的。分段线性能够实现对图像某些区域的特定分析,常用于图像增强中。最简单的就是对比度拉伸。     对比度拉伸技术是通过扩展图像灰度级动态范围...
  • spw_1201
  • spw_1201
  • 2016年12月06日 14:27
  • 3558

OpenCV 图像增强—直方图均衡化和灰度拉伸

1、直方图均衡化 void cvEqualizeHist( const CvArr* src, CvArr* dst ); 用来使灰度图象直方图均衡化,可以将比较淡的图像变换为比较深的图像(即增强...
  • zhang412yi
  • zhang412yi
  • 2015年01月04日 21:15
  • 4718

OpenCV实现灰度直方图和直方图拉伸

灰度直方图是数字图像中最简单且有用的工具,这一篇主要总结OpenCV中直方图CvHistogram的结构和应用。...
  • wishchin
  • wishchin
  • 2015年09月15日 15:24
  • 2499

【数字图像处理之(三)】用图像增强谈灰度变换

前面已经说了,数字图像处理是指通过计算机对数字图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。 其主要目的有三个方面: 提高图像的视感质量,如进行图像的亮度、彩色变换,...
  • u012771236
  • u012771236
  • 2014年06月29日 12:40
  • 6452

grayStretch.exe:基于OpenCV的程序对图片进行灰度拉伸

  • 2009年06月23日 18:43
  • 1.08MB
  • 下载

opencv 拉伸、扭曲、旋转图像-仿射变换 opencv1 / opencv2 / python cv2(代码)

http://blog.csdn.net/u012005313/article/details/46714637 仿射变换-基于2x3矩阵进行的图像变换 一个任意的仿射变换可以表达为乘以一个矩...
  • oMingZi12345678
  • oMingZi12345678
  • 2016年07月15日 11:28
  • 1301

图像处理(一)全等级直方图灰度拉伸

灰度拉伸属于线性点运算的一种。灰度拉伸。也称对比度拉伸,是一种简单的线性点运算。它扩展图像的直方图,使其充满整个灰度级范围内。 设f(x,y)为输入图像,它的最小灰度级A和最大灰度级B的定义,如下:...
  • guoyk1990
  • guoyk1990
  • 2012年10月23日 19:24
  • 12146

基于查找表的灰度拉伸

下面要写一个书上的例子,就是利用查找表来完成灰度图像的灰度拉伸。 在写程序中,我们总希望提升运算的速度,特别是在实时检测中,程序运算时间的长短决定着算法到底能不能用。查找表是把事先计算好的数据存入数...
  • jiang111_111shan
  • jiang111_111shan
  • 2014年11月27日 15:54
  • 418

【OpenCV图像处理】九、常见的图像灰度变换

1.灰度线性变换 图像的灰度线性变换是图像灰度变换的一种,图像的灰度变换通过建立灰度映射来调整源图像的灰度,从而达到图像增强的目的。灰度映射通常是用灰度变换曲线来进行表示。通常来说,它是将图像的像素值...
  • qq_34784753
  • qq_34784753
  • 2017年03月13日 16:16
  • 3237

OpenCV拉伸图像

OpenCV的getPerspectiveTransform()函数 和  warpPerspective()函数配合使用,可以实现图像的拉伸。 下面给一个函数cvMatRect2Tetra(),将...
  • liji_digital
  • liji_digital
  • 2017年05月13日 22:15
  • 1052
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Opencv 图像增强算法 图像检测结果
举报原因:
原因补充:

(最多只允许输入30个字)