9 Stimmen

Fehler beim Drucken eines Bildes mit OpenCV putText

Ich versuche, Text auf ein Bild zu drucken ( cv::Mat ) mit cv::putText

string text = "Funny text inside the box";
int fontFace = FONT_HERSHEY_SCRIPT_SIMPLEX;
double fontScale = 2;
int thickness = 3;  
cv::Point textOrg(10, 130);
cv::putText(img, text, textOrg, fontFace, fontScale, Scalar::all(255), thickness,8);

Dies führt jedoch zu einem Zugriffsverletzungsfehler zur Laufzeit. Während

cv::putText(img, "text", textOrg, fontFace, fontScale, Scalar::all(255), thickness,8);

führt dazu, dass "???text" auf das Bild gedruckt wird. Haben Sie eine Idee, was falsch laufen könnte?

6voto

Julia Schwarz Punkte 2560

Ich bin mir nicht sicher, was das korrekte Protokoll dafür ist, aber ich hatte genau das gleiche Problem wie @arbguy und meine Lösung war aufgrund von @Vlads Kommentar. Anhand von @Vlads Kommentar habe ich überprüft, ob ich die richtigen (Debug-)Bibliotheken für meinen Debug-Build verwendet habe. Ich tat es nicht. Wenn ich die Bibliotheken auf die Debug-Version der Bibliotheken setzte, war mein Fehler behoben und ich konnte cv::putText korrekt verwenden. Hier ist, was ich tat (mit Visual Studio 2012):

  1. Setzen Sie alle meine openCV .lib Referenzen auf die "d.lib" Versionen. Ihre Referenzen werden unterschiedlich sein, je nachdem, welche Bibliotheken Sie verwenden, aber hier sind meine Referenzen:

    opencv_imgproc242d.lib
    opencv_core242d.lib
    opencv_highgui242d.lib
  2. Ich musste dann die korrekten .dll-Bibliotheken in mein ausführbares Verzeichnis kopieren. Ich habe einen Post-Build-Schritt, der die erforderlichen .dll-Dateien in das Binärverzeichnis kopiert. Ich musste auch kopieren "tbb_debug.dll" auch. Diese befindet sich in %OPENCVDIR%\build\common\tbb\ia32\vc10 (für mein 32-Bit-Build). Die endgültige Liste der .dll-Dateien, die ich rüberkopieren musste, war: opencv_imgproc242d.dll o opencv_highgui242d.dll

Danach funktionierte alles! HINWEIS: Ich bin kein C++-Experte, wenn also jemand einen besseren Vorschlag hat, wie man das machen kann, bin ich froh. Außerdem bin ich mir nicht sicher, wie ich @Vlad für die Lösung dieses Problems würdigen soll, da er die richtige Lösung vorgeschlagen hat.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X