简介
在这篇文章中,我们将了解如何在OpenCV中使用cv2.putText()函数在图像上添加文本。在很多情况下,你可能需要在图像上写文字,要么是为了注释,要么只是为了进行调试,等等。在这里,我们将向你解释cv2.putText()的语法和一些例子,以便你能清楚地理解它,特别是对于初学者。
在OpenCV Python中在图像上放置文本:cv2.putText()
通过使用cv2.putText()函数,我们可以在OpenCV python中很容易地在图像上添加文本。这个函数的语法如下所示
语法
cv2.putText(img, text, org, fontFace, fontScale, color, thickness)
- img -它是要写上文字的图像。
- text -它是需要写在图像上的文字。
- org -图像中文本字符串的左下角。
- fontFace -文本的字体:点击这里查看OpenCV中可用的字体类型。
- fontScale -这个值通过乘以它的基本尺寸来扩展文本的大小。
- color -文本的颜色。
- thickness -文本行的厚度。
Python OpenCV中cv2.putText()的例子
导入所需的库
在开始举例之前,让我们首先导入所需的库,如下所示
在[1]中:
import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
创建空图像的实用函数
我们将编写一个实用函数,帮助创建一个大小为512×512和3个颜色通道的空图像。我们将使用这个空白图像在上面写文字。
在[2]中:
def generate_empty_image():
return np.ones(shape=(512,512,3), dtype=np.int16)
让我们通过下面的调用看到这个函数的作用。
在[3]中:
sample_img = generate_empty_image()
plt.imshow(sample_img)
输出[3]:
<matplotlib.image.AxesImage at 0x1e14d0dc9b0>。

例子-1:用cv2.putText()在图像上添加文本
在这第一个例子中,我们将在空白图像上写一个简单的文本,颜色是绿色,字体是FONT_HERSHEY_TRIPLEX,字体比例是3,厚度是3。
In[4]:
img = generate_empty_image()
cv2.putText(img=img, text='Hello', org=(150, 250), fontFace=cv2.FONT_HERSHEY_TRIPLEX, fontScale=3, color=(0, 255, 0),thickness=3)
plt.imshow(img)
输出[4]:
<matplotlib.image.AxesImage at 0x1531e80ec50>。

例子 - 2: 在cv2.putText()中把文本放在多行上
OpenCV的putText()函数并不支持在多行上写文字。我们必须使用某些变通方法来实现这一点。
在下面的例子中,我们根据换行符来分割文本,然后在一个循环中把每一行写到图像上。
In[5]:
img1 = generate_empty_image()
text = "How\nAre\nYou"
y_start = 150
y_increment = 100
for i, line in enumerate(text.split('\n')):
y = y_start + i*y_increment
cv2.putText(img=img1, text=line, org=(150, y), fontFace=cv2.FONT_HERSHEY_SCRIPT_COMPLEX, fontScale=4, color=(255,255,0),
thickness=3)
plt.imshow(img1)
Out[5]:
<matplotlib.image.AxesImage at 0x15325aeecf8>。

例子 - 3: 在cv2.putText()中把带有背景颜色的文本放在图像上
OpenCVcv2.putText()没有任何内置的功能来为文本设置背景色。但是有一个变通的方法可以达到这个效果。
我们可以在图像上创建一个所需颜色的小矩形,然后把文本放在矩形上。
在下面的例子中,我们创建了一个黑色的矩形,并通过计算各种坐标将文字写在里面。
In[6]:
img3 = cv2.imread('cat.jpg')
x,y,w,h = 0,0,400,250
# Create background rectangle with color
cv2.rectangle(img3, (x,x), (x + w, y + h), (0,0,0), -1)
# Add text
cv2.putText(img=img3, text="CAT",org=(x + int(w/10),y + int(h/1.5)), fontFace=cv2.FONT_HERSHEY_DUPLEX, fontScale=4, color=(255,0,0), thickness=7)
plt.imshow(img3)
Out[6]:
<matplotlib.image.AxesImage at 0x1532cf0b860>。

总结
希望你觉得这个关于在OpenCV中书写文本的快速教程很有帮助。我们介绍了cv2.putText()函数的语法以及各种例子,以便初学者更好地理解。
参考资料: