OpenCV python 交互与绘图图形
import numpy as np
import cv2
# 全局参数
g_thickness = -1
g_mode = 1
# 1.创建白色背景图
d = 400
img = np.ones((d, d, 3), np.uint8) * 255
# 2.绘制图片函数
def draw(event, x, y, flags, param):
global g_mode
# 点击鼠标左键
if event == cv2.EVENT_LBUTTONDOWN:
a = np.random.randint(1, d - 50)
r = np.random.randint(1, d/5)
angle = np.random.randint(0, 361)
color = np.random.randint(0, high=256, size=(3, )).tolist()
if g_mode == 1: # 矩形
cv2.rectangle(img, (x, y), (a, a), color, g_thickness)
elif g_mode == 2: # 圆形
cv2.circle(img, (x, y), r, color, g_thickness)
elif g_mode == 3: # 线
cv2.line(img, (a, a), (x, y), color, 3)
elif g_mode == 4: # 椭圆
cv2.ellipse(img, (x, y), (100, 150), angle, 0, 360, color, g_thickness)
elif g_mode == 5: # 文字
cv2.putText(img, "opencv", (0, round(d/ 2)),
cv2.FONT_HERSHEY_SIMPLEX, 2, color, 5)
def main():
global g_mode, g_thickness
# 3.创建显示窗体 与 回调函数创建
cv2.namedWindow("img")
cv2.setMouseCallback("img", draw)
# 4.显示绘制结果与修改绘制模式
while True:
cv2.imshow("img", img)
key = cv2.waitKey(1) & 0xFF
if key == ord("r"): # 矩形
g_mode = 1
elif key == ord("c"): # 圆形
g_mode = 2
elif key == ord("l"): # 线
g_mode = 3
elif key == ord("e"): # 椭圆
g_mode = 4
elif key == ord("t"): # 文字
g_mode = 5
elif key == ord("f"): # 实心
g_thickness = -1
elif key == ord("u"): # 空心
g_thickness = 3
elif key == 27: # 退出
break
cv2.imwrite("img.jpg", img)
cv2.destroyAllWindows()
if __name__ == '__main__':
main()
绘制结果: