【转】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;

}


本文来自CSDN博客,转载请标明出处:http:
//blog.csdn.net/hardVB/archive/2007/01/05/1474880.aspx

posted on 2009-07-05 20:25 碧云天 阅读(1305) 评论(0)  编辑 收藏 引用 所属分类: opencv学习


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

文章分类

文章档案

收藏夹

Emgu CV ——c#版的opencv

Help

搜索

最新评论

阅读排行榜

评论排行榜