因为使用的摄像头图像质量很差,不能直接用做分割等后续的处理,需要根据直方图进行图像增强,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[]存放图象各个灰度级出现的次数;
/* ************************************************
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[]存放图象各个灰度级出现的次数;