现在的位置: 首页 > 综合 > 正文

opencv 亮度与对比度调节

2013年11月07日 ⁄ 综合 ⁄ 共 1901字 ⁄ 字号 评论关闭

 

// 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;
}

抱歉!评论已关闭.