Comment faire une incrustation sur l'image lorsque vous travaillez avec des cv::Mat type
Je suis en utilisant opencv 2.1. Dans mon code j'ai quelques images stockées comme Mat objets initialisés comme ceci:
Mat img1 = imread("img/stuff.pgm", CV_LOAD_IMAGE_GRAYSCALE);
Je peux les afficher correctement à l'aide de imshow() après mon matrice opérations sont effectuées. Maintenant, je veux ajouter du texte sur l'image pour décrire ce qui s'est passé. En regardant la documentation, il semble que cvPutText()
serait la fonction dont j'ai besoin. Mais quand j'ai essayer quelque chose comme cela:
cvPutText(result, "Differencing the two images.", cvPoint(30,30), &font, GREEN);
J'obtiens l'erreur de compilation suivante:
error: cannot convert ‘cv::Mat’ to ‘CvArr*’ for argument ‘1’ to ‘void cvPutText(CvArr*, const char*, CvPoint, const CvFont*, CvScalar)’
Que dois-je faire pour être en mesure d'ajouter du texte lors de l'affichage de cette image?
Vous devez vous connecter pour publier un commentaire.
Je cherchais au mauvais endroit. J'ai trouvé la réponse dans la plus récente OpenCV documentation pour le rpc. Il y a une nouvelle fonction appelée putText() qui accepte cv::Mat objets. J'ai donc essayé cette ligne et ça fonctionne:
Espère que cela aide quelqu'un.
cv::putText
Pour C++ utilisation de base:
Voir putText() dans OpenCV docs.
Au-dessus de la ligne "résultat" doit être un cvArr* ou un IplImage*. mais à partir du code fourni ici, je suppose que vous êtes de passage d'un cv::Mat objet.
Donc, vous avez besoin de les convertir à l'aide de cvarrToMat() ou pass &résultat au lieu de résultat.
Espère que cela aide
Vous pouvez également effectuer les opérations suivantes pour imprimer du texte et des variables.
i
s dans votre scalaire? pourquoi est -<< "Here..."
en dehors de la parenthèse? Je ne pouvais pas obtenir cet exemple pour compiler.<<
surcharger les besoins d'une autre bibliothèque qui ne fait pas partie de openCV distribution par défaut.Un méchant détail que j'ai vu dans mon code de test: faites attention à l'importation stament - elle n'est pas affichée dans la plupart des exemples, et qu'il doit être le droit d'importation.
Mon code de test utilisé uniquement la putText exemple ci-dessus, et je n'ai inclus le imgproc.h comme je l'ai fait dans certains de mes oldcode. Le code compilé et lié amende cependant, j'ai été confronté à un weirdy comportement avec le putText (peu de déchet dans mon image).
C'était un pain PITA jusqu'à ce que j'ai compris que l'importation a vous embêter avec ma vie sociale ...
imageText.cpp
Ensuite, j'ai juste changé le imgproc d'importation ci-dessus pour
Mes 5 cents.
putText(img1, "TextString123", cvPoint(50,200), FONT_HERSHEY_SCRIPT_SIMPLEX, 2.5, cvScalar(255,0,0,255), 3, CV_AA);
Vous pouvez trouver plus d'informations ici: http://docs.opencv.org/2.4.9/modules/core/doc/drawing_functions.html
Le principal diference entre cette réponse et les réponses à partir de ci-dessus est la valeur de la 7-ème paramètre, l'épaisseur niveau. Avec une épaisseur==1 cette fonction n'ont pas fonctionné pour moi.
matImg1
est (il n'apparaît pas dans la question).