东莞房产网站建设,沈阳网站建设企业,广州网站备案方案,企业官网怎么编辑目录 #xff08;1#xff09;查看cv2所支持的鼠标事件#xff08;2#xff09;通过鼠标事件在图像上做标记#xff08;3#xff09;高级操作#xff1a;通过移动鼠标在图像绘制图形、曲线 该功能主要创建一个鼠标事件发生时执行的回调函数。鼠标事件可以是任何与鼠标有… 目录 1查看cv2所支持的鼠标事件2通过鼠标事件在图像上做标记3高级操作通过移动鼠标在图像绘制图形、曲线 该功能主要创建一个鼠标事件发生时执行的回调函数。鼠标事件可以是任何与鼠标有关的东西例如左键左键左键双击等。它给我们每个鼠标事件的坐标(x,y)。有了这个活动和地点我们可以做任何我们喜欢的事情。
1查看cv2所支持的鼠标事件
opencv官网解释鼠标事件 其对以下函数有详细介绍
import cv2
# 通过dir访问cv2的EVENT事件
events[i for i in dir(cv2) if EVENTin i]
print(events)2通过鼠标事件在图像上做标记 代码中已经给出注释这里就不做过多说明具体可刨析源码 # 构建一个画圆事件
# 发生鼠标事件时鼠标在图像位置的xy坐标def draw(event, x, y, flags, param):# 事件调用鼠标双击鼠标左键if event cv2.EVENT_LBUTTONDBLCLK:# 将鼠标双击处的坐标转为字符串location ( str(x) , str(y) )# 可有可无若是想输出上述坐标即可保留# print(location)# 在鼠标点击处绘制标记cv2.drawMarker(img, (x, y), (255, 0, 0), cv2.MARKER_CROSS, thickness1)# 在鼠标点击处绘制圆cv2.circle(img, (x, y), 50, (0, 255, 0), 1)# 在鼠标点击处显示当前图像坐标cv2.putText(img, location, (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, [0, 0, 255], 1)# img np.zeros((512, 512, 3), np.uint8)
img cv2.imread(rD:\data\img.png)
# 创建窗口
cv2.namedWindow(draw_img)
# 将窗口与回调函数绑定
cv2.setMouseCallback(draw_img, draw)
while True:cv2.imshow(draw_img, img)# 按q结束当前窗口if cv2.waitKey(1) 0xFF ord(q):break
cv2.destroyAllWindows()3高级操作通过移动鼠标在图像绘制图形、曲线 代码中已经给出注释这里就不做过多说明具体可刨析源码 # 此时为False,当鼠标产生反应时变成True
drawn False
# 当model为True时为绘制矩形当按下m时为绘制曲线
mode True
ix, iy -1, -1# 创建回调函数def drawing(event, x, y, flags, param):global ix, iy, drawn, mode# 按下鼠标左键时返回初始坐标if event cv2.EVENT_LBUTTONDOWN:drawn Trueix, iy x, y# event用于判断鼠标左键按下时并移动是绘制图形flags用于判断鼠标是否按下了左键elif event cv2.EVENT_MOUSEMOVE and flags cv2.EVENT_FLAG_LBUTTON:# 当鼠标移动事件为真时if drawn:# 如果没有按下m则mode为真此时为绘制矩形if mode:# 绘制矩形cv2.rectangle(img, (ix, iy), (x, y), (30, 120, 0), -1)# 当按下m后此时为绘制曲线else:# 绘制圆cv2.circle(img, (x, y), 1, (0, 255, 255), -1)# 当鼠标松开时停止绘图elif event cv2.EVENT_LBUTTONUP:drawn Falseif __name__ __main__:img cv2.imread(rD:\data\img.png)cv2.namedWindow(name window)cv2.setMouseCallback(name window, drawing)while 1:cv2.imshow(name window, img)k cv2.waitKey(1) 0xFFif k ord(m):mode not modeelif k ord(q):breakcv2.destroyAllWindows()
在图像上绘制边框矩阵 其代码和上个代码很类似只需要调整一下