加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
drawing.py 1.87 KB
一键复制 编辑 原始数据 按行查看 历史
cyt 提交于 2020-10-11 16:31 . 使用多线程做了优化,仍有些许bug
import cv2 as cv
import image
import graph
import numpy as np
import threading
winName = image.winName # 窗口名
seed = [] # 种子结点列表
threadStop = [False] # 线程列表
# 用于停止鼠标事件的响应
def setVoid(event, x, y, flags, param):
pass
# 用于绘制路径
def draw(end):
end = graph.arr[end[0]][end[1]]
if end.e and not end.inl:
while end.backNode is not None:
cv.circle(image.img, (end.y, end.x), 2, (0, 127, 255), -1)
end = end.backNode
# 鼠标回调函数
def onMouse(event, x, y, flags, param):
# 鼠标左键按下
if event == cv.EVENT_LBUTTONDOWN:
length = len(threadStop)
threadStop[length - 1] = True # 终止上一线程
threadStop.append(False)
t = threading.Thread(target=graph.path, args=(y, x, length)) # 创建新线程
t.start()
print('设置种子结点为:( %d, %d )' % (y, x))
len1 = len(seed)
if len1 > 0:
cv.circle(image.img, (seed[len1 - 1][1], seed[len1 - 1][0]), 3, (0, 0, 0), -1)
seed.append((y, x))
cv.circle(image.img, (x, y), 3, (0, 0, 0), -1)
image.temp = image.img.copy()
# 鼠标移动
elif event == cv.EVENT_MOUSEMOVE:
len1 = len(seed)
if len1 > 0:
image.img = image.temp.copy()
draw((y, x))
# 鼠标右键按下
elif event == cv.EVENT_RBUTTONDOWN:
len1 = len(seed)
if len1 > 0:
cv.line(image.img, (x, y), (seed[0][1], seed[0][0]), (0, 127, 255), thickness=3)
cv.circle(image.img, (seed[0][1], seed[0][0]), 3, (0, 0, 0), -1)
cv.circle(image.img, (seed[len1 - 1][1], seed[len1 - 1][0]), 3, (0, 0, 0), -1)
print('绘制结束!!!')
cv.setMouseCallback(winName, setVoid)
# 每次鼠标事件结束刷新窗口
cv.imshow(image.winName, image.img)
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化