首页 > 代码库 > OpenCV Tutorials —— Changing the contrast and brightness of an image

OpenCV Tutorials —— Changing the contrast and brightness of an image

Brightness and contrast adjustments

  • Two commonly used point processes are multiplication and addition with a constant:

    g(x) = \alpha f(x) + \beta

 

  • The parameters \alpha > 0 and \beta are often called the gain and bias parameters; sometimes these parameters are said to control contrast and brightness respectively.

 

  • You can think of f(x) as the source image pixels and g(x) as the output image pixels. Then, more conveniently we can write the expression as:

    g(i,j) = \alpha \cdot f(i,j) + \beta

    where i and j indicates that the pixel is located in the i-th row and j-th column.

 

亮度增强

M3X28~$2}@5(HTP8M}5~SC7

 

#include "stdafx.h"#include <cv.h>#include <highgui.h>#include <iostream>using namespace cv;double alpha; /**< Simple contrast control */int beta;  /**< Simple brightness control */int main( int argc, char** argv ){	/// Read image given by user	Mat image = imread( "xue.jpg" );	Mat new_image = Mat::zeros( image.size(), image.type() );	/// Initialize values	std::cout<<" Basic Linear Transforms "<<std::endl;	std::cout<<"-------------------------"<<std::endl;	std::cout<<"* Enter the alpha value [1.0-3.0]: ";std::cin>>alpha;	std::cout<<"* Enter the beta value [0-100]: "; std::cin>>beta;	/// Do the operation new_image(i,j) = alpha*image(i,j) + beta	for( int y = 0; y < image.rows; y++ )	{ for( int x = 0; x < image.cols; x++ )	{ for( int c = 0; c < 3; c++ )	{		new_image.at<Vec3b>(y,x)[c] =			saturate_cast<uchar>( alpha*( image.at<Vec3b>(y,x)[c] ) + beta );	}	}	}	/// Create Windows	namedWindow("Original Image", 1);	namedWindow("New Image", 1);	/// Show stuff	imshow("Original Image", image);	imshow("New Image", new_image);	/// Wait until user press some key	waitKey();	return 0;}

 

new_image.at<Vec3b>(y,x)[c] =saturate_cast<uchar>( alpha*( image.at<Vec3b>(y,x)[c] ) + beta ); 
 
注意 : y,x
注意: image.at<Vec3b>(y,x)[c]

To access each pixel in the images we are using this syntax: image.at<Vec3b>(y,x)[c] where y is the row, x is the column and c is R, G or B (0, 1 or 2).

 

最后,这样的方法OpenCV有现成的

image.convertTo(new_image, -1, alpha, beta);

OpenCV Tutorials —— Changing the contrast and brightness of an image