2016-06-15 3 views
0

Ich versuche OpenCV zu verwenden, um ein Bild aus Text zu erstellen. Das Bild kann ein Overlay haben oder nicht, das mit ihm verschmolzen werden muss. Die Schriftart des Texts muss anders sein als der HERSHEY-Text, der mit der C++ - Schnittstelle von OpenCV geliefert wird. Ich sah in this post und anderen, dass es mit den cvFontQt und cvAddText getan werden kann.OpenCV: Text wird nicht angezeigt, wenn die Qt-Bibliothek mit cvFontQt und cvAddText unter Windows 10 in VS2015 x64 build

Ich verwende OpenCV 2.4.13 und Qt 5.6. In dem folgenden Beispielcode I die ersten und dritten Zeilen Ausgang cvPutText mit cvFont und HERSHEY jedoch die zweite Leitung unter Verwendung cvAddText mit cvFontQt nicht verwendet, kann nicht angezeigt werden.

#include "stdafx.h" 
#include "opencv2\core\core_c.h"   
#include "opencv2\highgui\highgui_c.h" 

int main() 
{ 
    // Create a window for a container to hold the image 
    cvNamedWindow("cvtest", CV_WINDOW_AUTOSIZE); 

    IplImage *img = cvCreateImage(cvSize(600, 300), IPL_DEPTH_64F, 4); 

    // Set the image background to white 
    cvSet(img, cvScalar(255, 255, 255)); 

    CvFont font; 

    cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5); 
    cvPutText(img, "cvInitFont; cvPutText: First line.", cvPoint(4, 30), &font, cvScalar(255)); 

    CvFont fontqt = cvFontQt("Courier New", -1, cvScalar(0,0,255), CV_FONT_NORMAL, CV_STYLE_NORMAL, 0); 
    cvAddText(img, "cvFontQV; cvAddText: Second line.", cvPoint(4, 60), &fontqt); 

    cvPutText(img, "cvInitFont; cvPutText: Third line.", cvPoint(4, 90), &font, cvScalar(255)); 

    cvShowImage("cvtest", img); 

    cvWaitKey(0); 

    cvSaveImage("C:\\OpenCvTest64F.jpg", img); 

    // Cleanup 
    cvDestroyAllWindows(); 
    cvReleaseImage(&img); 

    return 0; 
} 

Das resultierende Bild ("C: \ OpenCvTest64F.jpg"):

Output Image

Bin ich cvFontQt cvAddText oder falsch verwenden? Irgendwelche Gedanken darüber, warum es nicht auf dem Bild erscheint?

Antwort

0

Gibt es einen bestimmten Grund, warum Sie Gleitkommabilder verwenden? Wenn nicht, versuchen Sie das Bild Initialisierung der Anpassung an:

IplImage *img = cvCreateImage(cvSize(600, 300), IPL_DEPTH_8U, 3); 

Die Verwendung eines 3-Kanal-8-Bit-Bild scheint das Problem zu beheben.

Nur ein Hinweis - wenn Sie Gleitkommabildern Farbe zuweisen, sollte der Wert im Bereich [0, 1], nicht [0, 255] liegen. Auch die C++ API ist viel schöner!

+0

Vielen Dank Frik !! Das hat den Trick gemacht. Ich stimme zu, die C++ API ist viel schöner. Ich würde es verwenden, wenn ich nicht mono-spaced Schriftart brauchte. – Tom

Verwandte Themen