Voglio scrivere su un'immagine un testo formattato. OpenCV offre solo un set limitato di caratteri predefiniti. È possibile usare gli altri? Ad esempio per leggerli dal file * .ttf (in Ubuntu)?OpenCV: Come utilizzare un altro carattere diverso da HERSHEY con cvPutText (come Arial)
risposta
E 'possibile utilizzare altri tipi di carattere, ma è necessario collegare la libreria Qt per OpenCV e utilizzare la funzione cvAddText con un cvFontQt
http://docs.opencv.org/modules/highgui/doc/qt_new_functions.html#addtext
http://docs.opencv.org/modules/highgui/doc/qt_new_functions.html#fontqt
Ci sono altre soluzioni si possono provare, con più o meno le stesse prestazioni di OpenCV. Ad esempio, è possibile utilizzare CAIRO per scrivere caratteri nell'immagine.
Se non puoi o non vuoi utilizzare i binding Qt, ecco un modo per farlo con CAIRO:
#include <opencv2/opencv.hpp>
#include <cairo/cairo.h>
#include <string>
void putTextCairo(
cv::Mat &targetImage,
std::string const& text,
cv::Point2d centerPoint,
std::string const& fontFace,
double fontSize,
cv::Scalar textColor,
bool fontItalic,
bool fontBold)
{
// Create Cairo
cairo_surface_t* surface =
cairo_image_surface_create(
CAIRO_FORMAT_ARGB32,
targetImage.cols,
targetImage.rows);
cairo_t* cairo = cairo_create(surface);
// Wrap Cairo with a Mat
cv::Mat cairoTarget(
cairo_image_surface_get_height(surface),
cairo_image_surface_get_width(surface),
CV_8UC4,
cairo_image_surface_get_data(surface),
cairo_image_surface_get_stride(surface));
// Put image onto Cairo
cv::cvtColor(targetImage, cairoTarget, cv::COLOR_BGR2BGRA);
// Set font and write text
cairo_select_font_face (
cairo,
fontFace.c_str(),
fontItalic ? CAIRO_FONT_SLANT_ITALIC : CAIRO_FONT_SLANT_NORMAL,
fontBold ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size(cairo, fontSize);
cairo_set_source_rgb(cairo, textColor[2], textColor[1], textColor[0]);
cairo_text_extents_t extents;
cairo_text_extents(cairo, text.c_str(), &extents);
cairo_move_to(
cairo,
centerPoint.x - extents.width/2 - extents.x_bearing,
centerPoint.y - extents.height/2- extents.y_bearing);
cairo_show_text(cairo, text.c_str());
// Copy the data to the output image
cv::cvtColor(cairoTarget, targetImage, cv::COLOR_BGRA2BGR);
cairo_destroy(cairo);
cairo_surface_destroy(surface);
}
Esempio chiamata:
putTextCairo(mat, "Hello World", cv::Point2d(50,50), "arial", 15, Scalar(0,0,255), false, false);
Si presuppone che l'obiettivo l'immagine è BGR.
Posiziona il centro del testo sul punto specificato. Se si desidera posizionare diversamente, è necessario modificare la chiamata cairo_move_to
.
Questa è una buona risposta! –
Grazie per il suggerimento. Ma "centerAnchor" si riferisce a "centerPoint"? E come possiamo installare Cairo su Ubuntu 16.04? – user1098761
@ user1098761 'sudo apt installa libcairo2-dev'. Se si utilizza CMake, è possibile seguire questa risposta https://stackoverflow.com/questions/41636886/cairo-library-and-cmake. Ho usato FindCairo.cmake da WebKit. –
- 1. OpenCV - cvPutText aggiunge rumore alle mie immagini
- 2. TextRenderer.DrawText rende Arial in modo diverso su XP vs Vista
- 3. Forza matplotlibrc utilizzare Arial (percorso di font)
- 4. Mostra schede con un carattere diverso (Emacs)
- 5. Come utilizzare l'output da awk in un altro comando?
- 6. OpenCV: come utilizzare createBackgroundSubtractorMOG
- 7. Come utilizzare una funzione da un xsl in un altro
- 8. come utilizzare un singolo servlet con un pattern URL diverso?
- 9. Come utilizzare BRISK in OpenCV?
- 10. Come utilizzare getWindowManager() da un altro file java
- 11. Come utilizzare una classe PHP da un altro file
- 12. Come utilizzare un diverso protocollo con $ AbsoluteLink in SilverStripe
- 13. Il carattere "Arial" non è disponibile per JVM
- 14. Come creare un canale da un altro con i trasduttori?
- 15. Come creare Haar Cascade (file .xml) da utilizzare in OpenCV?
- 16. Come copiare un pacchetto di Monticello a un altro repository con un nome diverso con Gofer
- 17. Utilizzare un comando diff diverso con CVS?
- 18. Il testo da SVG a PNG non viene visualizzato correttamente - Carattere Arial
- 19. MongoDB: Come impostare un altro campo (diverso da _id) come ID del documento mongo?
- 20. Espressione regolare di Java: corrispondenza di un carattere, salvo quando preceduta da un altro carattere.
- 21. Carattere Arial richiesto in PDF (BIRT pdf renderer, Linux)
- 22. Come utilizzare cv :: BackgroundSubtractorMOG in OpenCV?
- 23. Font Arial per il testo in Android
- 24. Come ruotare un video con OpenCV
- 25. Come utilizzare la funzione cvProjectPoints2 di OpenCV
- 26. Come lavorare con 2 XMLHttpRequest uno dipendente da un altro?
- 27. Come utilizzare Opencv per il riconoscimento del documento con l'OCR?
- 28. Come consentire ad Emacs di visualizzare un carattere diverso da quello effettivamente memorizzato?
- 29. CGBitmapContextCreate per CV_8UC3 (da utilizzare in OpenCV)
- 30. Come utilizzare SIFT in OpenCV 3.0 con C++?
Dai un'occhiata al link http://opencv.willowgarage.com/documentation/cpp/drawing_functions.html#cv-puttext – G453