使用cv2库来获取图片上鼠标点击位置的坐标,如何在下一次点击鼠标时,上一次的坐标自动删除
import cv2
def mouse(event, x, y, flags, param):
# event是鼠标点击事件,默认为0,点击时为1
# cv2.EVENT_LBUTTONDOWN默认为1
if event == cv2.EVENT_LBUTTONDOWN:
xy = "%d,%d" % (x, y)
cv2.circle(img, (x, y), 1, (0, 0, 255), thickness=-1)
cv2.putText(img, xy, (x, y), cv2.FONT_HERSHEY_PLAIN,
1.8, (0, 0, 255), thickness=1)
cv2.imshow("image", img) # 显示坐标
img = cv2.imread("E:\import\\1.png") # 图片路径
cv2.namedWindow("image", cv2.WINDOW_NORMAL) # 设置窗口标题和大小
cv2.setMouseCallback("image", mouse)
cv2.imshow("image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
无
下一次点击鼠标时,上一次的坐标自动删除。不然坐标全堆叠在一起回看不清
import cv2
def mouse(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
img1 = img.copy()
xy = "(%d,%d)" % (x, y) # 设置坐标显示格式
cv2.circle(img1, (x, y), 1, (0, 255, 0), thickness=-1)
cv2.putText(img1, xy, (x+10, y-10), cv2.FONT_HERSHEY_PLAIN, 2, (0, 255, 0), thickness=1)
cv2.imshow("image", img1) # 显示坐标
def get_coordinate_by_click(img_path):
global img
img = cv2.imread(img_path) # 图片路径
cv2.namedWindow("image", cv2.WINDOW_AUTOSIZE) # 设置窗口标题和大小
# cv2.resizeWindow('image', 1000, 400)
cv2.setMouseCallback("image", mouse)
cv2.imshow("image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__=='__main__':
img_path = "E:\import\\1.png"
get_coordinate_by_click(img_path)
问题解决
def mouse(event, x, y, flags, param):
# event是鼠标点击事件,默认为0,点击时为1
# cv2.EVENT_LBUTTONDOWN默认为1
if event == cv2.EVENT_LBUTTONDOWN:
xy = "%d,%d" % (x, y)
cv2.circle(img, (x, y), 1, (0, 0, 255), thickness=-1)
cv2.putText(img, xy, (x, y), cv2.FONT_HERSHEY_PLAIN,
1.8, (0, 0, 255), thickness=1)
cv2.imshow("image", img) # 显示坐标
你每次点击都创建了一个img,把img拿到外面去做全局变量,每次都改变同一个img,或者在mouse方法的第一行就先把img释放了