2016-06-06 9 views
1

Ich möchte die contrast des Balgbildes mit opencv c++ erhöhen.Wie erhöhe ich den Kontrast eines Bildes mit opencv C++?

enter image description here

Ich benutze histogram Verarbeitungstechniken zB Histogrammausgleich (HE), Histogramm Spezifikation, etc. Aber ich erreicht nicht gutes Ergebnis wie unten Bilder:

enter image description here

Welche Ideen auf wie zu solve diese Aufgabe würden Sie vorschlagen? Oder auf welcher Ressource auf der internet kann ich Hilfe finden?

Antwort

2

Ich bin kein Experte, aber Sie könnten versuchen, die Anzahl der Farben durch Zusammenführung von Grautönen in dunklere Grautöne zu reduzieren, und helle Graustufen in Weiß.

Z. B .:

  • Finden Sie die kleinste gemeinsame Farbe in < 0.0, 0.5) Bereich, verschmelzen sie zu schwarz.
  • Finden Sie die kleinste gemeinsame Farbe in < 0.5, 1.0> Bereich, verschmelzen Sie es in Richtung weiß.

würde dies die Anzahl der Farben reduzieren und dazu beitragen, eine Lücke zwischen brigher dunkleren Farben vielleicht zu erstellen.

+0

wenn es möglich ist, führen Sie mich mit einem Beispielcode. –

+1

Dies könnte besser mit einem Cluster-Algorithmus wie K-Means erreicht werden. Hier ist ein Tutorial: https://www.pyimagesearch.com/2014/07/07/color-quantization-opencv-using-k-means-clustering/ – richar8086

4

fand ich einen nützlichen Gegenstand auf OpenCV zum Ändern der Bildkontrast:

#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!

+0

Dies ist eine lineare Transformation und es erreicht kein gutes Ergebnis wie Bilder oben. –

+0

@AlirezaAlipourBloordokani haben jede Methode sonst lineare Transformation? Kann dir das helfen? Siehe: [Der schnellste Weg, um den Farbkontrast zu erhöhen ...] (http://stackoverflow.com/questions/19363293/whats-the-fastest-way-to-increase-color-image-contrast-with-opencv- in-python-c) –

+0

Ich benutze alle Techniken, aber sie erreichen kein gutes Ergebnis wie Bilder oben. Ich brauche einen leistungsfähigen Algorithmus ..... –

2

Diese möglicherweise zu spät, aber Sie können createCLAHE() -Funktion in openCV versuchen. Funktioniert gut für mich.

Verwandte Themen