绘制文本

cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])

  • img:要绘制文本的对象
  • text:添加的文本信息
  • org:文本在图片中左下角的坐标
  • fontFace:字体
    • FONT_HERSHEY_COMPLEX
    • FONT_HERSHEY_COMPLEX_SMALL
    • FONT_HERSHEY_DUPLEX
    • FONT_HERSHEY_PLAIN
    • FONT_HERSHEY_SCRIPT_COMPLEX
    • FONT_HERSHEY_SCRIPT_SIMPLEX
    • FONT_HERSHEY_SIMPLEX
    • FONT_HERSHEY_TRIPLEX
    • FONT_ITALIC
  • fontScale:字体大小
  • color:颜色
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    """
    @Project :Opencv学习
    @File :绘制文本及中文文本.py
    @IDE :PyCharm
    @Author :咋
    @Date :2023/1/12 16:43
    """
    import cv2
    # 创建窗口
    cv2.namedWindow("image",cv2.WINDOW_NORMAL)
    cv2.resizeWindow("image",(640,480))
    image = cv2.imread("image.jpg")
    cv2.putText(image,"Hallo,opencv",(200,500),cv2.FONT_HERSHEY_TRIPLEX,5,(0,0,0))
    cv2.imshow("image",image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

image.png

中文文本

使用Pillow库,即PIL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project :Opencv学习
@File :绘制文本及中文文本.py
@IDE :PyCharm
@Author :咋
@Date :2023/1/12 16:43
"""
import cv2
import numpy as np
# 创建窗口
cv2.namedWindow("image",cv2.WINDOW_NORMAL)
cv2.resizeWindow("image",(640,480))
image = cv2.imread("image.jpg")
# 绘制文本
cv2.putText(image,"Hallo,opencv",(200,500),cv2.FONT_HERSHEY_TRIPLEX,5,(0,0,0))


# 绘制中文文本,依托PIL库
# 导入 字体文件
from PIL import ImageFont,ImageDraw,Image
font = ImageFont.truetype("msyh.ttc",150)
# 创建一个pillow的图片
pil_img = Image.fromarray(image)
# 绘制图片
draw = ImageDraw.Draw(pil_img)
# 利用draw去绘制中文
draw.text((100,200),"PIL解决中文显示的问题",font=font,fill=(0,255,0,0)) # 后面的fill即颜色,RGBA
# 重新变为ndarray
image = np.array(pil_img)
cv2.imshow("image",image)
cv2.waitKey(0)
cv2.destroyAllWindows()

image.png

添加中文封装成函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project :Opencv学习
@File :添加中文封装成函数.py
@IDE :PyCharm
@Author :咋
@Date :2023/1/12 17:00
"""
from PIL import ImageFont,ImageDraw,Image
import numpy as np
def add_chinese(image,text,font_size,font_color):
"""
:param image: 传入的图片对象
:param text: 需要添加的文本
:param font_size: 字体大小
:param font_color: 字体颜色,四位元组,代表着RGBA,如(0,255,0,0)
:return: image
"""
font = ImageFont.truetype("msyh.ttc",font_size)
# 创建一个pillow的图片
pil_img = Image.fromarray(image)
# 绘制图片
draw = ImageDraw.Draw(pil_img)
# 利用draw去绘制中文
draw.text((100, 200), text , font=font, fill=font_color) # 后面的fill即颜色,RGBA
# 重新变为ndarray
image = np.array(pil_img)
return image


# 测试函数能否正常运行
import cv2
cv2.namedWindow("image",cv2.WINDOW_NORMAL)
cv2.resizeWindow("image",(640,480))
image = cv2.imread("image.jpg")
image = add_chinese(image,"测试函数能否正常运行",150,(0,0,0,0))
cv2.imshow("image",image)
cv2.waitKey(0)
cv2.destroyAllWindows()

image.png