您的位置:首页 > 运维架构

opencv 亮度与对比度调节

2011-09-26 10:59 218 查看
 
// cv1.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <cv.h>

#include <cxcore.h>

#include <highgui.h>

int BrightnessAdjust(const IplImage* srcImg,

      IplImage* dstImg,

      float brightness)

{

 assert(srcImg != NULL);

 assert(dstImg != NULL);

 int x,y,i;

 float val;

 for (i = 0; i < 3; i++)//彩色图像需要处理3个通道,灰度图像这里可以删掉

 {

  for (y = 0; y < srcImg->height; y++)

  {

   for (x = 0; x < srcImg->width; x++)

   {

    val = ((uchar*)(srcImg->imageData + srcImg->widthStep*y))[x*3+i];

    val += brightness;

    //对灰度值的可能溢出进行处理

    if(val>255) val=255;

    if(val<0) val=0;

    ((uchar*)(dstImg->imageData + dstImg->widthStep*y))[x*3+i] = (uchar)val;

   }

  }

 }

 return 0;

}

int ContrastAdjust(const IplImage* srcImg,

       IplImage* dstImg,

       float nPercent)

{

 assert(srcImg != NULL);

 assert(dstImg != NULL);

 int x,y,i;

 float val;

 for (i = 0; i < 3; i++)//彩色图像需要处理3个通道,灰度图像这里可以删掉

 {

  for (y = 0; y < srcImg->height; y++)

  {

   for (x = 0; x < srcImg->width; x++)

   {

    val = ((uchar*)(srcImg->imageData + srcImg->widthStep*y))[x*3+i];

    val = 128 + (val - 128) * nPercent;

    //对灰度值的可能溢出进行处理

    if(val>255) val=255;

    if(val<0) val=0;

    ((uchar*)(dstImg->imageData + dstImg->widthStep*y))[x*3+i] = (uchar)val;

   }

  }

 }

 return 0;

}

int main(int argc, char** argv)

{

 IplImage* srcImg = cvLoadImage("77.jpg");

 assert( srcImg != NULL );

 IplImage* brightnessImg = cvCloneImage(srcImg);

 //亮度变换,最后数值取值为正时变亮,负则变暗

 BrightnessAdjust(srcImg, brightnessImg, 8.0f);

 IplImage* contrastImg = cvCloneImage(srcImg);

 //对比度变换,数值小于1降低对比度,大于1增强对比度

 ContrastAdjust(srcImg, contrastImg, 1.3f);

 cvNamedWindow("Source",CV_WINDOW_AUTOSIZE);

 cvNamedWindow("BrightnessAdjust",CV_WINDOW_AUTOSIZE);

 cvNamedWindow("ContrastAdjust",CV_WINDOW_AUTOSIZE);

 cvShowImage("Source",srcImg);

 cvShowImage("BrightnessAdjust",brightnessImg);

 cvShowImage("ContrastAdjust",contrastImg);

 cvWaitKey(0);

 cvReleaseImage(&srcImg);

 cvReleaseImage(&brightnessImg);

 cvReleaseImage(&contrastImg);

 cvDestroyWindow("Source");

 cvDestroyWindow("BrightnessAdjust");

 cvDestroyWindow("ContrastAdjustrast");

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  null float