user5363744
user5363744

Reputation:

How increase the contrast of an image with opencv c++?

I want to increase the contrast of the bellow picture, with opencv c++.

enter image description here

I use histogram processing techniques e.g., histogram equalization (HE), histogram specification, etc. But I don't reaches to good result such as bellow images:

enter image description here

What ideas on how to solve this task would you suggest? Or on what resource on the internet can I find help?

Upvotes: 2

Views: 6301

Answers (3)

Jiawei Sun
Jiawei Sun

Reputation: 63

This might be late, but you can try createCLAHE() function in openCV. Works fine for me.

Upvotes: 2

I found a useful subject on OpenCV for changing image contrast :

#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( argv[1] );
 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;
}

See: Changing the contrast and brightness of an image!

Upvotes: 4

hauron
hauron

Reputation: 4668

I'm no expert but you could try to reduce the number of colours by merging grays into darker grays, and light grays into whites.

E.g.:

  • Find the least common colour in <0.0, 0.5) range, merge it towards black.
  • Find the least common colour in <0.5, 1.0> range, merge it towards white.

This would reduce the number of colours and help create a gap between brigher darker colours maybe.

Upvotes: 2

Related Questions