Warum funktioniert “cout” seltsam für “unsigned char”?

Lesezeit: 1 Minute

Warum funktioniert cout seltsam fur unsigned char
Khawar Ali

Ich habe folgenden Code:

cvtColor (image, image, CV_BGRA2RGB);
Vec3b bottomRGB;
bottomRGB=image.at<Vec3b>(821,1232);

Wenn ich zeige bottomRGB[0], es zeigt einen Wert größer als 255 an. Was ist der Grund dafür?

  • Die wahrscheinlichste Erklärung ist, dass Ihr Bild eine höhere Bittiefe als 8-Bit hat (die von 0-255 für unsigned int reicht). Weitere Informationen finden Sie unter die Dokumentation..

    – scap3y

    27. Januar ’14 um 7:05

  • Ich habe auch versucht, es in CV_8U umzuwandeln, aber ohne Hilfe

    – Khawar Ali

    27. Januar ’14 um 7:08

  • Könnten Sie das Originalbild hochladen (nicht mit dem Standard-Uploader, sondern auf einer Site, auf der die Eigenschaften beibehalten werden können)..?

    – scap3y

    27. Januar ’14 um 7:12

  • Dies ist das Originalbild: upload.wikimedia.org/wikipedia/commons/4/48/…

    – Khawar Ali

    27. Januar ’14 um 7:15

  • Okay, mein Fehler. cout<

    – Khawar Ali

    27. Januar ’14 um 7:38


Warum funktioniert cout seltsam fur unsigned char
herohuyongtao

Wie Sie kommentiert haben, liegt der Grund darin, dass Sie cout um seinen Inhalt direkt auszudrucken. Hier versuche ich Ihnen zu erklären, warum dies nicht funktioniert.

cout << bottomRGB[0] << endl;

Warum "cout" funktioniert komisch für "unsigned char"?

Es wird nicht funktionieren, weil hier bottomRGB[0] ist ein unsigned char (mit Wert 218), cout werde tatsächlich welche drucken Müllwert (oder nichts), da es nur a . ist nicht bedruckbar ASCII-Zeichen die sowieso gedruckt wird. Beachten Sie, dass das ASCII-Zeichen entspricht 218 ist nicht bedruckbar. Kasse Hier für die ASCII-Tabelle.

PS Sie können überprüfen, ob bottomRGB[0] ist druckbar oder wird nicht verwendet isprint() wie:

cout << isprint(bottomRGB[0]) << endl; // will print garbage value or nothing

Es wird gedruckt 0 (oder false) zeigt an, dass das Zeichen nicht druckbar ist


Damit Ihr Beispiel funktioniert, müssen Sie es zuerst eingeben, bevor Sie es ausführen cout:

cout << (int) bottomRGB[0] << endl; // correctly printed (218 for your example) 

  • du brauchst nur cout << +bottomRGB[0]

    – phuclv

    3. September ’18 um 10:01

.

445140cookie-checkWarum funktioniert “cout” seltsam für “unsigned char”?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy