创建画布,绘制静态&动态图形—opencv实战4
【代码】创建画布,绘制静态&动态图形—opencv实战4。
·
import cv2 as cv
import numpy as np
# 定义绘图演示函数draw_demo,封装所有绘图逻辑
def draw_demo():
image = np.zeros([500, 500, 3], dtype=np.uint8) # 创建一张 500x500像素、3通道的纯黑色画布(全0矩阵=黑色)
cv.line(image, (100, 50), (150, 200), (255, 0, 0), 2) # 绘制直线:参数1:目标图像;参数2:起点坐标 (x1, y1);参数3:终点坐标 (x2, y2);参数4:线条颜色 BGR格式(蓝,绿,红) → (255,0,0)=纯蓝色;参数5:线条粗细(像素值)
cv.rectangle(image, (100, 50), (200, 250), (0, 255, 0), 2) # 绘制矩形:参数1:目标图像;参数2:左上角坐标 (x1, y1);参数3:右下角坐标 (x2, y2);参数4:颜色 (0,255,0)=纯绿色;参数5:线条粗细;若传-1表示实心填充
cv.circle(image, (100, 50), 20, (0, 0, 255), 3) # 绘制圆形:参数1:目标图像;参数2:圆心坐标 (x, y);参数3:半径(像素);参数4:颜色 (0,0,255)=纯红色;参数5:线条粗细;-1=实心圆
cv.putText(image, "hello", (100, 50), 0, 2, (255, 255, 255), 2, 1) # 绘制文本: 参数1:目标图像;参数2:文字内容;参数3:文字左下角起始坐标;参数4:字体样式(0=默认字体);参数5:字体缩放大小(数字越大字越大);参数6:颜色 (255,255,255)=白色;参数7:文字粗细;参数8:线条类型(1=抗锯齿线,显示更清晰)
cv.imshow("image", image) # 显示静态绘制好的图像,窗口名称为"image"
# 无限循环:用于动态随机绘制线条
while True:
xx = np.random.randint(0, 500, 2) # 生成2个0-500之间的随机整数,作为一组随机坐标xx
yy = np.random.randint(0, 500, 2) # 生成2个0-500之间的随机整数,作为另一组随机坐标yy
bgr = np.random.randint(0, 255, 3) # 生成3个0-255之间的随机整数,作为随机BGR颜色值
# cv.line(图像, 起点, 终点, 颜色, 粗细, 线型:8 邻域抗锯齿线(平滑、清晰), 偏移:0=无偏移)绘制随机颜色、随机起点终点的直线
# xx 是一个包含 2 个随机数的数组
cv.line(image,(xx[0],yy[0]),(xx[1],yy[1]),(int(bgr[0]),int(bgr[1]),int(bgr[2])),1,8,0)
cv.imshow('result',image) # 静态图(矩形、圆、hello)留在画布上,动态随机线,是在同一张画布上不断叠加画上去;实时显示动态绘制后的图像,窗口名称为"result"
c=cv.waitKey(1000) # 等待1000毫秒(1秒),同时检测按键输入;每1秒刷新一次,实现缓慢动态绘图:画一条随机线,停 1 秒,再画一条,再停 1 秒
if c==27: # 判断按下的键是否为ESC键(ASCII码27)
break # 退出while循环,结束程序
cv.destroyAllWindows()
# Python程序主入口:当直接运行此脚本时,执行draw_demo函数
if __name__ == "__main__":
draw_demo()
更多推荐
所有评论(0)