问题遇到的现象和发生背景
使用cv2库来在图片上画框,如何在下一次画框时,自动删除上一次的框
问题相关代码,请勿粘贴截图
import cv2
global img
global point1, point2
global g_rect
drawing = False # 鼠标按下为真
ix, iy = -1, -1
px, py = -1, -1
def draw_circle(event, x, y, flags, param):
global ix, iy, drawing, px, py, img, point1, point2
img2 = img.copy()
if event == cv2.EVENT_LBUTTONDOWN: # 左键点击,则在原图打点
drawing = True
ix, iy = x, y
xy = "%d,%d" % (x, y)
point1 = (ix, iy)
cv2.circle(img2, point1, 2, (0, 255, 0), thickness=0)
cv2.putText(img, xy, (x, y), cv2.FONT_HERSHEY_PLAIN, 1.5, (0, 255, 0), thickness=1)
cv2.imshow('image', img2)
elif event == cv2.EVENT_MOUSEMOVE and (flags & cv2.EVENT_FLAG_LBUTTON): # 按住左键拖曳,画框
if drawing == True:
cv2.rectangle(img2, point1, (x, y), (0, 255, 0), thickness=0)
cv2.imshow('image', img2)
cv2.waitKey(16)
elif event == cv2.EVENT_LBUTTONUP: # 左键释放,显示
drawing = False
point2 = (x, y)
xy = "%d,%d" % (x, y)
cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), thickness=0)
cv2.putText(img, xy, (x, y), cv2.FONT_HERSHEY_PLAIN, 1.5, (0, 255, 0), thickness=1)
cv2.imshow('image', img2)
px, py = -1, -1
def get_coordinate_by_frame(img_path):
global img
img = cv2.imread(img_path) # 图片路径
cv2.namedWindow('image', cv2.WINDOW_AUTOSIZE)
cv2.setMouseCallback('image', draw_circle)
while True:
cv2.imshow('image', img)
cv2.waitKey(1)
# 点击窗口X按钮关闭窗口
if cv2.getWindowProperty('image', cv2.WND_PROP_VISIBLE) < 1:
break
if __name__ == '__main__':
pass
img_path = "E:\import\\1.png"
get_coordinate_by_frame(img_path)
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
下次画框时,上次的框自动删除