feisky

云计算、虚拟化与Linux技术笔记
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

图像灰度值调整(C/C++源代码)

Posted on 2008-04-11 19:11  feisky  阅读(593)  评论(0编辑  收藏  举报
2004年09月23日 16:00:00

图像的象素值变换,包括亮度、对比度和GAMMA校正算法,环境是OPENCV4.0,VC6.0。算法参考了MATLAB函数imadjust 。

//
// perform histgram equalization for single channel image
//

#include "cv.h"
#include "highgui.h"


int ImageAdjust(IplImage* src, IplImage* dst,
               double low, double high,   // lowand high are the intensities of src
               double bottom, double top, // mapped to bottom and top of dst
               double gamma )
{
    double low2= low*255;
    double high2= high*255;
    doublebottom2 = bottom*255;
    double top2= top*255;
    doubleerr_in = high2 - low2;
    doubleerr_out = top2 - bottom2;

    intx,y;
    doubleval;

    if(low<0 && low>1 && high <0 &&high>1 && bottom<0 && bottom>1 &&top<0 && top>1)
       return 1;
   
    // intensitytransform
    for( y = 0;y < src->height; y++)
    {
       for (x = 0; x < src->width; x++)
       {
           val = ((uchar*)(src->imageData + src->widthStep*y))[x];
           val = pow((val - low2)/err_in, gamma) * err_out + bottom2;
           if(val>255) val=255; if(val<0) val=0; // Make sure src is inthe range [low,high]
           ((uchar*)(dst->imageData + dst->widthStep*y))[x] = (uchar)val;
       }
    }
    return0;
}



Trackback:http://tb.blog.csdn.net/TrackBack.aspx?PostId=114398


无觅相关文章插件,快速提升流量