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()
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐