5. cv2.putText() 绘制文字
5.1 绘制文字
putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)
- img ~
- text 要绘制的文本内容,字符串格式。putText()方法不支持绘制中文字符,否则会出现乱码。
- org 文字的开始坐标
- fontFace 字体样式,参照字体样式表。
- fontScale 字体大小
- color 颜色
- thickness 线条宽度
- lineType 线条产生的算法类型,可以是4或者8,默认为8.
- bottomLeftOrigin 绘制文字时的方向,默认为False
/
import numpy as np import cv2 canvas = np.ones((500, 1000, 3), np.uint8) * 255 cv2.putText(canvas, "Hou Xiao Jiu", (250, 250), cv2.FONT_HERSHEY_TRIPLEX, 2, (0, 255, 255), 5) cv2.imshow("Text", canvas) cv2.waitKey() cv2.destroyAllWindows()
5.2 垂直镜像效果
将 bottomLeftOrigin 设为 True
则图像会呈现出以下效果:
import numpy as np import cv2 canvas = np.ones((500, 1000, 3), np.uint8) * 255 cv2.putText(canvas, "Hou Xiao Jiu", (250, 250), cv2.FONT_HERSHEY_TRIPLEX, 2, (0, 255, 255), 5, bottomLeftOrigin=True) cv2.imshow("Text", canvas) cv2.waitKey() cv2.destroyAllWindows()
5.3 不同字体效果
通过设置fontFace参数来呈现不同的字体效果:
import numpy as np import cv2 canvas = np.ones((1000, 1000, 3), np.uint8) * 255 cv2.putText(canvas, "I Love You", (300, 100), cv2.FONT_HERSHEY_TRIPLEX, 2, (0, 255, 255), 5) cv2.putText(canvas, "I Love You", (300, 200), cv2.FONT_HERSHEY_PLAIN, 2, (0, 255, 255), 5) cv2.putText(canvas, "I Love You", (300, 300), cv2.FONT_HERSHEY_DUPLEX, 2, (0, 255, 255), 5) cv2.putText(canvas, "I Love You", (300, 400), cv2.FONT_HERSHEY_COMPLEX, 2, (0, 255, 255), 5) cv2.putText(canvas, "I Love You", (300, 500), cv2.FONT_HERSHEY_TRIPLEX, 2, (0, 255, 255), 5) cv2.putText(canvas, "I Love You", (300, 600), cv2.FONT_HERSHEY_COMPLEX_SMALL, 2, (0, 255, 255), 5) cv2.putText(canvas, "I Love You", (300, 700), cv2.FONT_HERSHEY_SCRIPT_SIMPLEX, 2, (0, 255, 255), 5) cv2.putText(canvas, "I Love You", (300, 800), cv2.FONT_HERSHEY_SCRIPT_COMPLEX, 2, (0, 255, 255), 5) cv2.putText(canvas, "I Love You", (300, 900), cv2.FONT_ITALIC, 2, (0, 255, 255), 5) cv2.imshow("Text", canvas) cv2.waitKey() cv2.destroyAllWindows()
6. 绘制动态图形
绘制动态图形,即图像在展示过程中,像素数组中数值的大小在时刻发生变动,而给人产生动态的效果。
以绘制一个圆形为例,在画布中移动,即圆心位置不停地发生改变,圆的半径保持不变。
这个过程可以通过while循环 结合 time.sleep()来完成。通过time.sleep()控制while循环执行的时间间隔,即动态图像画面的帧数。
每次循环都给圆心一个不同的位置;每次移动触碰到边界,都改变一次移动方向。
此外,为了得到更炫酷的效果,我们还可以给每一帧画面的小球都设置一个随机的不同的颜色。
import cv2 import time import numpy as np width, height = 500, 500 r = 40 x = 40 y = 250 # 在水平和竖直方向上每次移动的距离 x_offer = y_offer = 8 while cv2.waitKey(1) == -1: if x > width - r or x < r: x_offer *= -1 if y > height - r or y < r: y_offer *= -1 x += x_offer y += y_offer img = np.ones((width, height, 3), np.uint8) * 255 cv2.circle(img, (x, y), r, tuple(np.random.randint(0, high=256, size=(3,)).tolist()), -1) cv2.imshow("img", img) time.sleep(1 / 60) # 休眠1/60秒,也就是秒60帧 cv2.destroyAllWindows()
执行效果片段展示: