在图像处理任务中,我们经常需要将文本添加到图像中。OpenCV 提供了 cv2.putText()
函数,可以很方便地在图像上绘制文本,支持多种字体、颜色、大小和位置等参数。
本文将详细介绍如何使用 OpenCV 在图像中添加文字,介绍 cv2.putText()
的语法、参数及使用示例。
1. cv2.putText()
函数简介
cv2.putText()
是 OpenCV 中的一个函数,用于在图像上绘制文本。通过该函数,我们可以指定文本的内容、位置、字体、大小、颜色等属性。
函数语法:
python">cv2.putText(image, text, org, fontFace, fontScale, color, thickness, lineType=cv2.LINE_AA)
参数说明:
- image:输入图像,文本将被添加到该图像上。
- text:要绘制的文本字符串。
- org:文本的左下角坐标
(x, y)
,即文本起始点的位置。 - fontFace:字体类型。OpenCV 提供了几种字体类型,常用的有
cv2.FONT_HERSHEY_SIMPLEX
。 - fontScale:字体大小,通常为浮动值,值越大字体越大。
- color:文本颜色,指定为 BGR 格式的颜色元组(例如
(255, 0, 0)
表示蓝色)。 - thickness:文本的粗细程度。值越大,文本的边缘就越粗。
- lineType:线型,通常设置为
cv2.LINE_AA
,表示抗锯齿线条,效果更加平滑。
2. 基本示例:在图像中写文字
我们将通过一个简单的示例,展示如何在图像上添加文本。
示例代码:
python">import cv2
import numpy as np# 创建一个白色背景的图像
image = np.ones((400, 600, 3), dtype=np.uint8) * 255# 要写入的文本
text = "Hello, OpenCV!"# 设置文本的位置(左下角)
org = (50, 200)# 设置字体、大小、颜色和粗细
font = cv2.FONT_HERSHEY_SIMPLEX
font_scale = 1.5
color = (0, 0, 255) # 红色
thickness = 2# 在图像上添加文本
cv2.putText(image, text, org, font, font_scale, color, thickness)# 显示图像
cv2.imshow("Text on Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码解析:
- 创建图像:我们创建了一幅 400x600 的白色背景图像(
np.ones((400, 600, 3), dtype=np.uint8) * 255
)。 - 定义文本:定义要写入的文本为
"Hello, OpenCV!"
。 - 设置文本属性:
org
:指定文本的起始位置(50, 200)
,即文本的左下角位置。font
:设置字体为cv2.FONT_HERSHEY_SIMPLEX
,这是一种简单的字体。font_scale
:设置字体大小为1.5
。color
:设置文本颜色为红色((0, 0, 255)
,BGR 格式)。thickness
:设置文本的粗细为2
。
- 绘制文本:调用
cv2.putText()
在图像上绘制文本。 - 显示图像:使用
cv2.imshow()
显示图像,并在按下任意键后关闭窗口。
3. 更改字体类型和大小
OpenCV 支持几种常用的字体类型,常见的包括:
- cv2.FONT_HERSHEY_SIMPLEX:无衬线字体(最常用的字体)。
- cv2.FONT_HERSHEY_PLAIN:简单无衬线字体。
- cv2.FONT_HERSHEY_DUPLEX:较粗的无衬线字体。
- cv2.FONT_HERSHEY_COMPLEX:复杂的无衬线字体。
- cv2.FONT_HERSHEY_TRIPLEX:较粗的复杂无衬线字体。
- cv2.FONT_HERSHEY_COMPLEX_SMALL:复杂的小无衬线字体。
- cv2.FONT_HERSHEY_SCRIPT_SIMPLEX:简单的手写字体。
- cv2.FONT_HERSHEY_SCRIPT_COMPLEX:复杂的手写字体。
示例:使用不同的字体
python">import cv2
import numpy as np# 创建一个白色背景的图像
image = np.ones((400, 600, 3), dtype=np.uint8) * 255# 要写入的文本
text = "Font Example!"# 设置文本的位置(左下角)
org = (50, 200)# 设置字体、大小、颜色和粗细
font = cv2.FONT_HERSHEY_DUPLEX
font_scale = 2
color = (0, 255, 0) # 绿色
thickness = 3# 在图像上添加文本
cv2.putText(image, text, org, font, font_scale, color, thickness)# 显示图像
cv2.imshow("Text with Different Font", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
4. 文本对齐
在 OpenCV 中,文本的位置通常是从文本的左下角开始指定的(即 (x, y)
坐标)。如果你需要更精确的文本对齐(例如居中、右对齐),你需要根据文本的大小进行计算。可以使用 cv2.getTextSize()
函数来获取文本的大小,然后进行适当的调整。
示例:文本居中对齐
python">import cv2
import numpy as np# 创建一个白色背景的图像
image = np.ones((400, 600, 3), dtype=np.uint8) * 255# 要写入的文本
text = "Centered Text"# 获取文本大小
(font_width, font_height), baseline = cv2.getTextSize(text, cv2.FONT_HERSHEY_SIMPLEX, 1, 2)# 计算文本的起始位置,使其居中
org = ((image.shape[1] - font_width) // 2, (image.shape[0] + font_height) // 2)# 在图像上添加文本
cv2.putText(image, text, org, cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)# 显示图像
cv2.imshow("Centered Text", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码解析:
- 获取文本大小:
cv2.getTextSize()
函数返回一个元组(font_width, font_height)
,表示文本的宽度和高度,以及baseline
(基线的偏移量)。 - 计算居中位置:通过
(image.shape[1] - font_width) // 2
计算文本水平居中的位置,通过(image.shape[0] + font_height) // 2
计算文本垂直居中的位置。 - 绘制文本:将计算好的坐标传入
cv2.putText()
。
5. 总结
在 OpenCV 中,使用 cv2.putText()
函数,我们可以轻松地在图像上添加各种文本。可以通过调整字体类型、大小、颜色、粗细等属性,来满足不同的需求。同时,通过计算文本的尺寸,还可以实现文本的精确对齐(如居中、右对齐等)。这些操作在图像标注、生成图表、图像处理和计算机视觉任务中都非常有用。