如何将多行文本插入框架/图像

Posted

技术标签:

【中文标题】如何将多行文本插入框架/图像【英文标题】:How to insert multiple lines of text into frame/image 【发布时间】:2015-02-08 12:38:43 【问题描述】:

我使用 C++ 和 OpenCV 创建了一个框架,并希望在其中插入几行文本。

使用如下代码:

putText(frame, "My text here", cvPoint(30,30), 
    FONT_HERSHEY_COMPLEX_SMALL, 0.8, cvScalar(200,200,250), 1, CV_AA); 

但在这里,我想写,假设有 2 行单独的行,“你好”和“欢迎”。 这里的问题是 \n 和 endl 不起作用。 此外,如果可能的话,将文本对齐到框架的中间。

非常感谢。

【问题讨论】:

您需要 2 行 putText。 (它不是文字处理器)。另外,请避免使用 cvScalar、cvPoint 等 c-api 结构,请改用 Scalar 和 Point 第二行怎么写? putText(frame, "第二行", Point(30,30+20), ...); 延伸阅读:Added ostream-like cv::putText helper function #313 【参考方案1】:

您需要为每条线路分别致电putText()。为了计算每个新行的位置,您可以使用 getTextSize() 返回文本的宽度和高度以及基线。在 Python 中,您可以执行以下操作:

    position = (30, 30)
    text = "Some text including newline \n characters."
    font_scale = 0.75
    color = (255, 0, 0)
    thickness = 3
    font = cv2.FONT_HERSHEY_SIMPLEX
    line_type = cv2.LINE_AA

    text_size, _ = cv2.getTextSize(text, font, font_scale, thickness)
    line_height = text_size[1] + 5
    x, y0 = position
    for i, line in enumerate(text.split("\n")):
        y = y0 + i * line_height
        cv2.putText(frame,
                    line,
                    (x, y),
                    font,
                    font_scale,
                    color,
                    thickness,
                    line_type)

【讨论】:

以上是关于如何将多行文本插入框架/图像的主要内容,如果未能解决你的问题,请参考以下文章

如何将图像从画廊插入到 EditTex 视图?

如何将图像垂直对齐到某些文本第一行的中心?

当内容覆盖文本视图中的多行时,有时图像跨度不可见

垂直对齐图像和多行文本

如何使用 Python 将文本添加到多个图像

如何将图像动态插入 docx 模板?