[OpenCV] Disparitätskarte Filter in neue cv::Mat
-
Guten Tag,
ich hoffe dieser Bereich ist am passensten für meine Frage.
Ausgangslage
Ich arbeite momentan mit OpenCV und erstelle mir hier meine Disparitätskarten sowie die Punktwolken.Problem
Nun habe ich folgendes Problem. Wenn ich die Disparitätskarte ungefiltert lasse, dann werden ja auch alle niedrigen Z-Koordinaten als Punkt in der Punktwolke dargestellt, wie in der Abbildung im nachfolgenden Link zu erkennen.http://www.directupload.net/file/d/4000/j8f44j3w_png.htm
Um dem entgegenzuwirken, war mein Plan niedrige Z-Werte (quasi die Auflagefläche) aus der Disparität-Matrix zu filtern, bevor Sie zur Punktwolke werden. Wobei ich mir nicht sicher bin ob das mit den "Z-Koordinaten" in der Disparitätskarte so einfach möglich ist
// Compute disparity sbm(mRectLeft , mRectRight, mDisparity); // hier erstellen der Disparitätskarte mDisparity.convertTo(mDisp8, CV_8U, 255/(96*16.)); // auf 8Bit komprimieren
Mein Ansatz
War folgender, die vorher komprimierte Matrize in Vektor-Form als CSV-Datei speichern. Hier jedoch weiß ich nicht, wie ich die CSV-Datei oder einfach den Vektor wieder in eine neue Matrize schreibe.QFile file("disparity.csv"); if (!file.open(QIODevice::WriteOnly)) { } QTextStream out(&file); for(int x = 0; x < 251; x++) { for(int y = 0; y < 251; y++) { Vec3b point = mDisp8.at<Vec3b>(x, y); if(point[2]>10) { out << point[0] << ";" << point[1] << ";" << point[2] << endl; } } } file.close();
Fragen zusammengefasst
- Besteht die Möglichkeit bestimmte Werte direkt aus einer cv::Mat zu entfernen
Falls nein - Wie schreibe ich die Werte aus der CSV, oder aber auch aus dem Vektor wieder direkt in eine neue cv::Mat?
Evtl. ist das ganze auch zu umständlich und es gibt einfachere Wege, ich wäre für eure Hilfe sehr dankbar.
Lieben Gruß
- Besteht die Möglichkeit bestimmte Werte direkt aus einer cv::Mat zu entfernen