zoukankan      html  css  js  c++  java
  • 【OpenCV学习】图像亮度、对比度调节(伽马校正)

    作者:gnuhpc
    出处:http://www.cnblogs.com/gnuhpc/

     
    #include "cv.h"
    #include "highgui.h"
    #include <stdio.h>
    int ImageAdjust(IplImage *src,IplImage *dst,
                    double low,double high,        //x direction
                    double bottom,double top,    //y direction
                    double gamma);
    int main(void)
    {
        char *filename="lena.jpg";
        IplImage *dst,*src = /blog.armyourlife.info/cvLoadImage(filename,0);
        if(!src)
        {
            printf("Couldn't seem to Open %s, sorry/n",filename);
            return -1;
        }
       
      cvNamedWindow( "src", 1 );
        cvNamedWindow( "result", 1 );
       
        // Image adjust
        dst = cvCloneImage(src);
        // 输入参数 [0,0.5] 和 [0.5,1], gamma=1
        if( ImageAdjust( src, dst, 0, 0.5, 0.5, 1, 1)!=0)
            return -1;
       
        cvShowImage( "src", src );
        cvShowImage( "result", dst );
        cvWaitKey(0);
        cvDestroyWindow("src");
        cvDestroyWindow("result");
        cvReleaseImage( &src );
        cvReleaseImage( &dst );
       
        return 0;
    }
    int ImageAdjust(IplImage* src, IplImage* dst,
            double low, double high,   // X方向:low and high are the intensities of src
            double bottom, double top, // Y方向:mapped to bottom and top of dst
            double gamma )
    {
        double low2 = low*255;
        double high2 = high*255;
        double bottom2 = bottom*255;
        double top2 = top*255;
        double err_in = high2 - low2;
        double err_out = top2 - bottom2;
        int x,y;
        double val;
        if(low<0 && low>1 && high <0 && high>1&&
        bottom<0 && bottom>1 && top<0 && top>1 && low>high)
            return -1;
          // intensity transform
        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 in the range [low,high]
                ((uchar*)(dst->imageData + dst->widthStep*y))[x] = (uchar) val;
            }
        }
        return 0;
    }

    作者:gnuhpc
    出处:http://www.cnblogs.com/gnuhpc/


                   作者:gnuhpc
                   出处:http://www.cnblogs.com/gnuhpc/
                   除非另有声明,本网站采用知识共享“署名 2.5 中国大陆”许可协议授权。


    分享到:

  • 相关阅读:
    HDU 1098 Ignatius's puzzle 也不大懂
    HDU 1099 Lottery
    图算法-Prime
    并查集
    CSS笔记2
    css笔记1
    HDU 5019 Revenge of GCD
    POJ 2255 Tree Recovery
    判断两条线段是否相交
    PAT 数列求和-加强版   (20分)(简单模拟)
  • 原文地址:https://www.cnblogs.com/gnuhpc/p/2722909.html
Copyright © 2011-2022 走看看