gpt4 book ai didi

image - OpenCV:如何将 HERSHEY 以外的其他字体与 cvPutText(如 Arial)一起使用

转载 作者:太空宇宙 更新时间:2023-11-03 20:39:06 26 4
gpt4 key购买 nike

我想将格式化文本写入图像。 OpenCV 仅提供一组有限的默认字体。是否可以使用其他人?例如从 *.ttf 文件(在 Ubuntu 中)读取它们?

最佳答案

如果您不能或不想使用 Qt 绑定(bind),这里有一种使用 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);
}

调用示例:

putTextCairo(mat, "Hello World", cv::Point2d(50,50), "arial", 15, cv::Scalar(0,0,255), false, false);

假设目标图像是BGR。

它将文本的中心置于给定点。如果你想要一些不同的定位,你必须修改 cairo_move_to 调用。

关于image - OpenCV:如何将 HERSHEY 以外的其他字体与 cvPutText(如 Arial)一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11917124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com