在OpenCV Python中使用cv2.putText()将文本放在图像上(附实例)

4,216 阅读3分钟

简介

在这篇文章中,我们将了解如何在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>。

Example of cv2.putText()

例子 - 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>。

Example of text in multiple lines in cv2.putText()

例子 - 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>。

Example of text in background color in cv2.putText()

总结

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

参考资料: