返回

OpenCV 绘制多行文本:使用换行符字符序列的完整指南

python

在 OpenCV 中使用换行符绘制文本

引言

OpenCV 中的 cv2.putText() 函数是绘制文本字符串的强大工具,但默认情况下它不支持换行。了解如何使用 OpenCV 特定的换行符字符序列可以帮助您在图像上创建多行文本,提升可读性和信息传递。

问题:使用标准换行符出现问号

当尝试在 cv2.putText() 中使用标准的换行符字符 \n 时,您可能会遇到文本中出现问号的问题。这是因为 OpenCV 无法识别 \n 作为换行符。

解决方案:使用 OpenCV 换行符字符序列

为了在 cv2.putText() 中实现换行,您需要使用以下特殊的换行符字符序列:

\r\n
  • \r(回车符)将文本光标移回行首。
  • \n(换行符)将文本移到下一行。

步骤指南

1. 设置文本

使用 \r\n 字符序列定义要绘制的文本。

text = "This is \r\n some text"

2. 绘制文本

使用 cv2.putText() 函数绘制文本,并使用 \r\n 字符序列表示换行符。

cv2.putText(img, text, (50,50), cv2.FONT_HERSHEY_SIMPLEX, 1, 2)

代码示例

import cv2

# 创建图像
img = np.zeros((300, 300, 3), np.uint8)

# 设置文本
text = "This is \r\n some text"

# 绘制文本
cv2.putText(img, text, (50,50), cv2.FONT_HERSHEY_SIMPLEX, 1, 2)

# 显示图像
cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果

此代码将生成一个图像,其中文本 "This is" 和 "some text" 分别绘制在图像的第一行和第二行。

提示

  • 始终使用 \r\n 作为 OpenCV 换行符序列,而不是 \n
  • 使用 cv2.getTextSize() 函数确定文本大小和绘制位置,以优化文本显示。
  • 探索 cv2.putText() 中其他选项,例如字体、颜色和文本对齐,以自定义文本的外观。

常见问题解答

1. 如何在 cv2.putText() 中居中文本?

text_size, _ = cv2.getTextSize(text, cv2.FONT_HERSHEY_SIMPLEX, 1, 2)
x_offset = (img.shape[1] - text_size[0]) // 2
y_offset = (img.shape[0] + text_size[1]) // 2
cv2.putText(img, text, (x_offset, y_offset), cv2.FONT_HERSHEY_SIMPLEX, 1, 2)

2. 如何在不同位置绘制多行文本?

lines = text.split('\r\n')
for i, line in enumerate(lines):
    cv2.putText(img, line, (50, 50 + 20 * i), cv2.FONT_HERSHEY_SIMPLEX, 1, 2)

3. 如何在图像上绘制边框文本?

cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(img, text, (50,50), cv2.FONT_HERSHEY_SIMPLEX, 1, 2, cv2.LINE_AA, 2)

4. 如何在图像上旋转文本?

rotation_matrix = cv2.getRotationMatrix2D((x, y), angle, 1.0)
rotated_text = cv2.warpAffine(text, rotation_matrix, (img.shape[1], img.shape[0]))
cv2.putText(img, rotated_text, (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, 2)

5. 如何在图像上绘制阴影文本?

shadow_color = (0, 0, 0)
shadow_offset_x = 2
shadow_offset_y = 2
cv2.putText(img, text, (x + shadow_offset_x, y + shadow_offset_y), cv2.FONT_HERSHEY_SIMPLEX, 1, 2, shadow_color)
cv2.putText(img, text, (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, 2, (255, 255, 255))

结论

使用 OpenCV 特定的换行符序列,您可以轻松地在图像上创建多行文本。这对于添加标题、注释、说明或任何需要多行文本的地方非常有用。通过利用此技巧,您可以显着提高图像中的文本可读性和信息传递。