OPENCV下针对IplImage实现图像增强处理

因为使用的摄像头图像质量很差,不能直接用做分割等后续的处理,需要根据直方图进行图像增强,OPENCV没有现成的方法,只有自己想办法了。 参考了网上文章 http://www.xiaozhou.net/ReadNews.asp?NewsID=771 原理就是利用直方图统计分布,将图像灰度的域值拉伸到0-255,原来网上的代码有些问题,而且是使用bmp的,我就改成了IplImage了,于是在OPENCV实现了这个功能,感觉效果不错,可以看到昏暗的图像可以增强的很好。

结果如下:

代码如下,

WW_RETURN HumanMotion::ImageStretchByHistogram(IplImage  * src,IplImage  * dst)
/* ************************************************
  Function:        
  Description:     因为摄像头图像质量差,需要根据直方图进行图像增强,
                   将图像灰度的域值拉伸到0-255
  Calls:          
  Called By:      
  Input:           单通道灰度图像                  
  Output:          同样大小的单通道灰度图像 
  Return:          
  Others:           
http://www.xiaozhou.net/ReadNews.asp?NewsID=771
  DATE:               2007-1-5
************************************************
*/
{
    
// p[]存放图像各个灰度级的出现概率;
    
// p1[]存放各个灰度级之前的概率和,用于直方图变换;
    
// num[]存放图象各个灰度级出现的次数;

    assert(src
-> width == dst -> width);
    
    
float  p[ 256 ],p1[ 256 ],num[ 256 ];
    
// 清空三个数组
    memset(p, 0 , sizeof (p));
    memset(p1,
0 , sizeof (p1));
    memset(num,
0 , sizeof (num));

    
int  height = src -> height;
    
int  width = src -> width;
    
long  wMulh  =  height  *  width;

    
// 求存放图象各个灰度级出现的次数
    
//  to do use openmp
     for ( int  x = 0 ;x < width;x ++ )
    {
        
for ( int  y = 0 ;y < height;y ++ )
        {
            uchar v
= ((uchar * )(src -> imageData  +  src -> widthStep * y))[x];
            num[v]
++ ;
        }
    }

    
// 求存放图像各个灰度级的出现概率
     for ( int  i = 0 ;i < 256 ;i ++ )
    {
        p[i]
= num[i] / wMulh;
    }

    
// 求存放各个灰度级之前的概率和
     for ( int  i = 0 ;i < 256 ;i ++ )
    {
        
for ( int  k = 0 ;k <= i;k ++ )
            p1[i]
+= p[k];
    }

    
// 直方图变换
    
//  to do use openmp
     for ( int  x = 0 ;x < width;x ++ )
    {
        
for ( int  y = 0 ;y < height;y ++ )
        {
            uchar v
= ((uchar * )(src -> imageData  +  src -> widthStep * y))[x];
            ((uchar
* )(dst -> imageData  +  dst -> widthStep * y))[x] =  p1[v] * 255 + 0.5 ;            
        }
    }

    
return  WW_OK;

}

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页