1. 参数简介
查到的文章过于辣鸡决定自己写个笔记
cv2.putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin)
'''
img: 绘制文字的图像源
text: 需要绘制的文字
org: 文字坐标(一堆乱写左上角的, 不过也不完全是左下角, 后面给测试)
fontFace: 字体
fontScale: 字号(double)
color: 颜色
thickness: 粗细(int)
lineType: 线条类型
bottomLeftOrigin: 默认是 False, 设为 True 文字会上下颠倒(官方解释是图像坐标原点是否在左下角)
'''
2. 文字坐标
测试代码:
import cv2
import numpy as np
text = 'abcdefghijklmnopqrstuvwxyz'
img = 255 * np.ones((35, 20*26, 3), np.uint8)
cv2.putText(img, text, (0, 25), cv2.FONT_HERSHEY_TRIPLEX, 1, (0, 0, 0), 1, cv2.LINE_AA, bottomLeftOrigin = False)
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
测试结果:
(1)(0, 0)
(2)(0, 35)
(3)(0, 25)
很明显,合适的文字坐标需要一定的尝试,而且不同文字和字体高度宽度不太一样。
另外,OpenCV里大多数绘制的坐标都是按(x, y)
设定的,但是图像为numpy数组在索引的时候是(h, w)
也就是(y, x)
(4)(0, 10), bottomLeftOrigin = True
图像坐标原点设在左下角,但是坐标轴依然是从上往下的,坐标要改到10
3. 字体
给出不同字体的样式以及在字号为1时的字体高度H和适合的Y坐标,字号变化时等比调整H和Y即可,序号为字体对应的int
(0)cv2.FONT_HERSHEY_SIMPLEX
H:35,Y:25
(1)cv2.FONT_HERSHEY_PLAIN
H:20,Y:15
(2)cv2.FONT_HERSHEY_DUPLEX
H:35,Y:25
(3)cv2.FONT_HERSHEY_COMPLEX
H:35,Y:25
(4)cv2.FONT_HERSHEY_TRIPLEX
H:35,Y:25
(5)cv2.FONT_HERSHEY_COMPLEX_SMALL
H:23,Y:15
(6)cv2.FONT_HERSHEY_SCRIPT_SIMPLEX
H:40,Y:25
(7)cv2.FONT_HERSHEY_SCRIPT_COMPLEX
H:40,Y:25
(16)cv2.FONT_ITALIC
官方文档说是斜体,但是直接用和(0)cv2.FONT_HERSHEY_SIMPLEX 一样,可能用法有问题。