2012-02-09 18 views
9

Estoy tratando de imprimir texto en una imagen (cv::Mat) usando cv::putTexterror al imprimir en una imagen usando OpenCV 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); 

Pero esto resulta en un error de acceso violación en tiempo de ejecución. Mientras que

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

se imprime "??? text" en la imagen. ¿Alguna idea de lo que podría estar yendo mal?

+0

No pude entender realmente cuál era el problema, pero lo solucioné usando cvPutText() y eso funciona bien. – bsidd

+2

¿podría ser que estés enlazando a la versión de depuración de las bibliotecas de OpenCV mientras compilas en el modo de lanzamiento (o viceversa)? – Vlad

+0

Obtengo etiquetas como esta en la barra de título de Windows creada con 'cv :: imshow' ... –

Respuesta

6

No estoy seguro de cuál es el protocolo correcto para esto, pero tenía exactamente el mismo problema que @arbguy y mi solución fue por el comentario de @ Vlad. Del comentario de @ Vlad, verifiqué si estaba usando las bibliotecas correctas (de depuración) para mi compilación Debug. Yo no estaba. Configurar las bibliotecas para la versión de depuración de las bibliotecas solucionó mi error y pude usar cv :: putText correctamente. Esto es lo que hice (usando Visual Studio 2012):

  1. establecer todas las referencias a mi OPENCV .lib a las versiones "d.lib". Sus referencias serán diferentes en función de qué librerías está utilizando pero aquí son mis referencias:

    opencv_imgproc242d.lib 
    opencv_core242d.lib 
    opencv_highgui242d.lib 
    
  2. luego tuve que copiar las librerías .dll correctas a mi directorio ejecutable. De hecho, tengo un paso posterior a la compilación que copia los archivos .dll necesarios en el directorio binario. También tuve que copiar "tbb_debug.dll" también. Esto se encuentra en %OPENCVDIR%\build\common\tbb\ia32\vc10 (para mi compilación de 32 bits). la lista final de los archivos .dll que tenía que copiar era: opencv_imgproc242d.dll opencv_core242d.dll opencv_highgui242d.dll

Después de hacer esto todo funcionaba! NOTA: No soy un experto en C++, así que si alguien tiene una mejor sugerencia para hacerlo, estoy contento. Además, no estoy seguro de cómo acreditar adecuadamente @Vlad para resolver realmente este problema ya que él es el que sugirió la solución correcta.

Cuestiones relacionadas