Dieser Beispielcode zeigt das korrekt erstellte Bild an, speichert jedoch ein PNG mit nur schwarzen Pixeln. Die Mat ist im CV_32FC3-Format, also 3 Float-Kanäle.
Die beantworteten Fragen, die ich gefunden habe, befassen sich mit Bildmanipulationsproblemen oder falschem Konvertieren oder Speichern in JPEG mit verschiedenen Komprimierungen.
%Vor%Welche Änderungen müssen vorgenommen werden, damit es wie erwartet gespeichert wird?
Wie Sie in der Dokumentation lesen können:
Die Funktion imwrite speichert das Bild in der angegebenen Datei. Das Bild Das Format wird basierend auf der Dateinamenserweiterung ausgewählt (siehe imread () für die Liste der Erweiterungen). Nur 8-Bit (oder 16-Bit unsigniert (CV_16U) für den Fall von PNG, JPEG 2000 und TIFF) einkanalig oder 3-kanalig (mit 'BGR' Kanalreihenfolge) Bilder können mit dieser Funktion gespeichert werden. Wenn das Format, Tiefe oder Kanalreihenfolge ist unterschiedlich, verwenden Sie Mat :: convertTo () und cvtColor (), um es vor dem Speichern zu konvertieren.
Sie sollten convertTo
verwenden, um von CV_32FC3
in CV_8UC3
zu konvertieren, um das gleiche Ergebnis zu erhalten:
Übrigens wird imshow()
korrekt angezeigt, weil ...
- Wenn das Bild 8-Bit vorzeichenlos ist, wird es so angezeigt.
- Wenn das Bild eine vorzeichenlose 16-Bit-Ganzzahl oder eine 32-Bit-Ganzzahl ist, werden die Pixel durch 256 geteilt. Das heißt, der Wertebereich [0,255 * 256] wird zugeordnet [0,255].
- Wenn das Bild ein 32-Bit-Gleitkommawert ist, werden die Pixelwerte mit 255 multipliziert. Dies bedeutet, dass der Wertebereich [0,1] zugeordnet wird [0,255].
Grundsätzlich ist der gleiche Trick, was Sie vor dem Schreiben tun müssen.