Heap Fehler mit opencv
-
Hallo liebes Forum,
ich sitze schon den ganzen Nachmittag an einem vermutlich nur kleinem Problem, bin aber noch ziemlicher programmier Anfänger und komme einfach nicht weiter.
Ich Arbeite gerade an einem Projekt mit opencv, bei dem ich versuche, mithilfe von 3D Daten eine Art Chroma Keyer zu erstellen. Nur soll Vordergrund und Hintergrund nicht durch die Farbe, sondern durch die Tiefeninformation getrennt werden.
Dazu will ich erstmal eine einfache Maske erstellen, die vor einer bestimmten Distanz im Tiefenbild weiß und dahinter schwarz ist.Dazu habe ich folgende Schleife erstellt. Mat depthMap ist dabei das 16 Bit Tiefenbild und mask die Maske.
Mat depthMap, mask; for (int i=1;i<=640;i++) { for (int j=1;j<=480;j++) { int depthVal = depthMap.at<uint16_t>(j,i); if (depthVal >= 3500) { mask.at<uint8_t>(j,i) = 0; } else { mask.at<uint8_t>(j,i) = 255; } } }Leider bekomme ich immer an der Stelle mask.at<uint8_t>(j,i) = 255; folgende Fehlermeldung von Microsoft Visual Studio 2010:
Windows hat einen Haltepunkt in keyer.exe ausgelöst. Dies kan auf eine Beschädigung des Heaps zurückzuführen sein, die auf ein Problem in keyer.exe ider in einer der geladenen DLLs hinweist. Dies kann auch darauf zurückzuführen sein, dass der Benutzer F12 drückt, während keyer.exe den Fokus hat. Weitere Analyseinformationen finden Sie möglicherweise im Ausgabefenster.Im Ausgabefenster steht allerdings nichts mehr.
Komischerweise funktioniert das ganze problemlos, solange ich den else Zweig weglasse.
Hoffe ihr könnt mir helfen.
Viele Grüße
Julian
-
Lass die Indices mal im Interval [0,640), bzw [0,480) laufen. Das ist in C, C++ und Java die übliche Nummerierung.
Besser ist natürlich noch [0, depthMap.rows) und [0, depthMap.cols), wenn ich das gerade richtig über opencv
Matgelesen habe.Dann würde ich auch in Row-major-order iterieren.
Also für ein 640x480 Mat-Objekt:Mat depthMap, mask; for (int i=0; i<depthMap.rows; ++i) { for (int j=0; j<depthMap.cols; ++j) { const uint16_t depthVal = depthMap.at<uint16_t>(i,j); // ... } }
-
Ohje ich dachte mir ja schon das es etwas einfaches ist. Und daran sitze ich Stunden. Hatte die Schleifen von wo anders kopiert und daher nicht mehr drüber nachgedacht.
Vielen Dank für deine Hilfe. :xmas1:
Gruß Julian