OpenCV-Python 常用绘图函数详解
1. cv2.putText() 函数详解
- 官方文档:cv::putText
- 函数原型
cv.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]] ) -> img
- 用法
在图像img
上呈现指定的指定的文本字符串text
。 - 参数说明
参数 | 类型 | 说明 | 备注 |
---|---|---|---|
img | numpy.ndarray | 需要添加文字的图像 | |
text | str | 需要添加的文字,以字符串形式给出 | |
org | (int, int) | 文本字符串在图像中左下角的位置,(x,y) 的坐标顺序 | |
fontFace | int | 字体样式 | 支持9 种字体样式 |
fontScale | float | 浮点数,给出文本尺度因子 | |
color | Any | 文本颜色,按(B, G, R) 顺序给出 | |
thickness | int | 用于绘制文本的线条的粗细 | 默认值为1 |
lineType | int | 线型 | 默认值LINE_8 |
bottomLeftOrigin | bool | 如果为真值,则图像原点在左下角,否则,在左上角 | 默认False |
2. cv2.rectangle() 函数详解
-
官方文档:cv::rectangle()
-
函数原型:
cv.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]] ) -> img cv.rectangle(img, rec, color[, thickness[, lineType[, shift]]] ) -> img
-
绘制矩形轮廓或填充矩形,有重载函数,支持不同实参传入:
- 传入两个对角顶点的坐标;
- 传入
rec
矩形。
-
参数说明
参数 类型 说明 备注 img numpy.ndarray
需绘制矩形的图像 pt1 str
矩形顶点1 pt2 (int, int)
与顶点1处于对角的另一顶点 color Any
矩形颜色,按 (B, G, R)
顺序给出thickness int
绘制矩形的线条宽度 默认值为 1
lineType int
线型 默认值 LINE_8
shift int
点坐标中的小数位数 默认为 0
3. 字体样式
-
支持下列
9
种字体样式,函数传参时,既可以传具体的字体样式,也可以直接用相应的index
。index
字体样式 说明 0 cv2.FONT_HERSHEY_SIMPLEX 正常大小无衬线字体 1 cv2.FONT_HERSHEY_PLAIN 小型无衬线字体 2 cv2.FONT_HERSHEY_DUPLEX 正常大小的无衬线字体(比font_HERSHEY_SIMPLEX更复杂) 3 cv2.FONT_HERSHEY_COMPLEX 正常大小衬线字体 4 cv2.FONT_HERSHEY_TRIPLEX 正常大小的衬线字体(比font_HERSHEY_complex更复杂) 5 cv2.FONT_HERSHEY_COMPLEX_SMALL FONT_HERSHEY_COMPLEX的较小版本 6 cv2.FONT_HERSHEY_SCRIPT_SIMPLEX 手写字体 7 cv2.FONT_HERSHEY_SCRIPT_COMPLEX FONT_HERSHEY_SCRIPT_SIMPLEX的更复杂变体 16 cv2.FONT_ITALIC 斜体标志 -
字体样式预览
4. 绘图线型
- 官方文档:cv::LineTypes
- 可用的线型有以下四种
线型 说明 备注 cv2.FILLED – – cv2.LINE_4 4连接线 – cv2.LINE_8 8连接线 – cv2.LINE_AA 抗锯齿线 可得到更平滑的曲线 - 不同线型效果预览
5. 示例代码
- 生成前文字体样式预览效果所用代码如下
import cv2 import numpy as np z1 = np.zeros((460, 1130, 3), dtype='uint8') font_list = ['FONT_HERSHEY_SIMPLEX', 'FONT_HERSHEY_PLAIN', 'FONT_HERSHEY_DUPLEX', 'FONT_HERSHEY_COMPLEX', \ 'FONT_HERSHEY_TRIPLEX', 'FONT_HERSHEY_COMPLEX_SMALL', 'FONT_HERSHEY_SCRIPT_SIMPLEX', \ 'FONT_HERSHEY_SCRIPT_COMPLEX', 'FONT_ITALIC'] font_family = [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, cv2.FONT_ITALIC] pos = (20, 35) text_color = (0, 255, 255) rect_color = (0, 0, 0) for idx, font_name in enumerate(font_family): info_name = f'font type [idx-{font_family[idx]}]: {font_list[idx]}' info_style = 'Test Text Appearance.' cv2.rectangle(z1, (pos[0] - 15, pos[1] + 15), (pos[0] + 1100, pos[1] - 30), rect_color, -1) # 填充 cv2.rectangle(z1, (pos[0] - 15, pos[1] + 15), (pos[0] + 1100, pos[1] - 30), (255, 255, 255)) # 画框 cv2.rectangle(z1, (pos[0] - 15 + 750, pos[1] + 15), (pos[0] + 1100, pos[1] - 30), rect_color, -1) # 填充 cv2.rectangle(z1, (pos[0] - 15 + 750, pos[1] + 15), (pos[0] + 1100, pos[1] - 30), (255, 255, 255)) # 画框 cv2.putText(z1, info_name, pos, 3, 0.8, text_color, 1, cv2.LINE_AA) cv2.putText(z1, info_style, (pos[0] + 750, pos[1]), font_name, 0.8, text_color, 1, cv2.LINE_AA) pos = (pos[0], pos[1] + 50) cv2.imshow('src', z1) cv2.waitKey(0) cv2.destroyAllWindows()