Ich arbeite mit TIF Bilder mit vorzeichenbehafteten ganzzahligen Daten. Nach erfolgreichem Eingeben und Verarbeiten muss ich das Bild im selben Format ausgeben (Eingabe und Ausgabe * .tif Dateien).Integer CV_32S Bild mit OpenCV speichern
Für die Eingabe weiß ich, dass OpenCV nicht weiß, ob die Daten signiert oder unsigniert ist, so dass es unsigned annimmt. Die Verwendung von this trick löst dieses Problem (Wechsel des Typs cv::Mat
von Hand).
Wenn ich jedoch das Bild ausgeben und es erneut laden, bekomme ich nicht das erwartete Ergebnis. Die Datei enthält mehrere Segmente (Gruppen von Pixeln), und das Format ist wie folgt (I dieses Format verwenden muß):
- alle Pixel kein Segment gehören, den Wert
-9999
- alle Pixel Zugehörigkeit zu einem einzelnen Segment die gleiche positive ganze Zahl
- (zB alle Pixel des ersten Segmentwert haben
1
, zweite2
etc)
und hier ist die EXA Code:
void ImageProcessor::saveSegments(const std::string &filename){
cv::Mat segmentation = cv::Mat(workingImage.size().height,
workingImage.size().width,
CV_32S, cv::Scalar(-9999));
for (int i=0, szi = segmentsInput.size(); i < szi; ++i){
for (int j=0, szj = segmentsInput[i].size(); j < szj; ++j){
segmentation.at<int>(segmentsInput[i][j].Y,
ssegmentsInput[i][j].X) = i+1;
}
}
cv::imwrite(filename, segmentation);
}
Sie können davon ausgehen, dass alle Variablen (z. workingImage
, segmentsInput
) existieren als globale Variablen.
Mit diesem Code, wenn ich das Bild eingab und die Werte untersuche, werden die meisten Werte auf 0
gesetzt, während diejenigen, die gesetzt sind, einen ganzen Bereich von ganzzahligen Werten haben (in meinem Beispiel hatte ich 20 Segmente).
In welchem Format speichern Sie Ihre Matrix? JPEG? – Sunreef
@Sunreef wie ich in meiner ursprünglichen Frage gesagt habe, ist es alles im TIF-Format – penelope
Sie können ganzzahlige Matrizen nicht direkt mit imwrite speichern. Die Dokumentation besagt: "Nur 8-Bit-Bilder (oder 16-Bit unsigniert (CV_16U) bei PNG, JPEG 2000 und TIFF) können einkanalig oder 3-kanalig (mit BGR-Kanalreihenfolge) mit gespeichert werden diese Funktion." – Sunreef