2016-08-09 7 views
2

ich habe Bildbearbeitungsprogramm mit opencv C++. inmy-Programm zwei Vorverarbeitungspfad ist für 2 Arten von Graustufenbildern und Farbbildern. aber manchmal bekomme ich Bilder ist Graustufe aber im RGB-Format speichern bedeutet, wenn Aussehen Bild ist grau, aber dieses Bild haben 3 Kanäle.Wie erkennen RGB-Bildformat ist wirklich grau?

Wie kann ich erkennen, ein RGB-Bildformat ist wirklich gefärbt oder grau?

+0

Da grau als nicht Sättigung definiert ist, konnte man auf einen Farbraum konvertieren, der eine Sättigung * * hat Komponenten (z.B. HSL) und überprüft, dass der Sättigungskanal Null ist, oder dass sein Maximum ist sehr klein. –

Antwort

1

Fast alle Farben von Grau haben red == green == blue. Überprüfen Sie einfach, dass die roten grünen und blauen Werte +10 or -10 sind.

Wenn Sie stattdessen eine bestimmte Form von Grau wünschen, können Sie this website auschecken, um die relevanten Farben von Grau zu sehen, die gebildet werden können, oder experimentieren Sie sich auf einem RGB-Eingangsportal.

6

Sie können durch die Pixel gehen und prüfen, ob ihr Wert für R, G und B immer gleich ist.

cv::Mat image; // your image with type CV_8UC3 
bool grayscale = true; 
for(int i = 0; i < image.rows; i++) { 
    cv::Vec3b* ptr = image.ptr<cv::Vec3b>(i); 
    for(int j = 0; j < image.cols; j++) { 
     if(!(ptr[j][0] == ptr[j][1] && ptr[j][0] == ptr[j][2])) { 
      grayscale = false; 
      break; 
     } 
    } 
    if(!grayscale) 
     break; 
}