Ich versuche, einen Objekttracker mit OpenCV 3.1.0 und C++ nach diesem Python-Beispiel zu erstellen: http://docs.opencv.org/3.1.0/df/d9d/tutorial_py_colorspaces.html#gsc.tab=0.OpenCV - cvtColor ändert den Farbraum nicht, er ändert die Farben
Ich habe einige Probleme mit der Funktion cvtColor(), weil es die Farben meiner Bilder und nicht ihren Farbraum ändert. Ich habe diesen Code:
Mat original_image;
original_image = imread(argv[1], CV_LOAD_IMAGE_COLOR); // The image is passed as arg
if (!original_image.data)
{
printf("Problem!\n");
return -1;
}
// From BGR to HSV
Mat hsv_image(original_image.rows, original_image.cols, original_image.type());
cvtColor(original_image, hsv_image, CV_BGR2HSV);
imwrite("hsv_image.png", hsv_image);
original_image ist ein CV_8UC3, kompatibel mit cvtColor() und sollte ursprünglich in der BGR-Farbraum sein.
Ich habe das Testbild unter mit GIMP:
Und ich bekomme das Bild als Ergebnis:
ich die Konvertierung von BGR in RGB beschlossen, zu versuchen, Ändern BGR2HSV zu BGR2RGB, und mit dem gleichen Testbild, bekomme ich dieses Ergebnis
Hier
, es ist mehr klar, dass die Kanäle des Bildes direkt geändert werden ...
Hat jemand eine Ahnung, was hier los ist?
Im zweiten Bild verwenden, sind Sie die Kanäle von [HSV Bild] Interpretation (https://en.wikipedia.org/wiki/HSL_and_HSV) (das ist Farbton, Sättigung, Wert) als Blau, Grün und Rot. Was haben Sie als Ergebnis erwartet (imwrite erwartet BGR)? –
Im Wesentlichen haben Sie diese entscheidende Information in der Dokumentation von ['imwrite()'] (http://docs.opencv.org/3.0-beta/modules/imgcodecs/doc/reading_and_writing_images.html#imwrite) nicht bemerkt: " Mit dieser Funktion können nur 8-Bit ... 3-Kanal-Bilder (mit BGR-Kanalreihenfolge) gespeichert werden. " –
Vielen Dank Dan! Ich habe das wirklich nicht überprüft, ich dachte, dass das Problem in der Transformation lag und ich habe die Funktion imwrite() nicht überprüft. Danke nochmal! – user3368457