家居网站开发项目计划书,做原油期货关注什么网站,单屏风格wordpress主题,八百客crm登录入口响应鼠标事件 3. 响应鼠标事件3.1 获取鼠标点击的坐标3.2 获取鼠标点击像素点的颜色3.3 在鼠标点击的位置生成圆3.4 通过拖动鼠标来绘制填充矩形3.5 通过拖动鼠标绘制未填充矩形3.6 使用鼠标选点绘制多边形3.7 按住鼠标左键进行绘图 3. 响应鼠标事件
使用OpenCV读取图像#… 响应鼠标事件 3. 响应鼠标事件3.1 获取鼠标点击的坐标3.2 获取鼠标点击像素点的颜色3.3 在鼠标点击的位置生成圆3.4 通过拖动鼠标来绘制填充矩形3.5 通过拖动鼠标绘制未填充矩形3.6 使用鼠标选点绘制多边形3.7 按住鼠标左键进行绘图 3. 响应鼠标事件
使用OpenCV读取图像可以在读取图像的窗口通过鼠标点击可以实现获取鼠标点击像素点的坐标、获取鼠标点击像素点的颜色和在鼠标点击的像素点生成圆等等。
# 对窗口的鼠标动作做出回应
cv2.setMouseCallback(winname, callback, userdata)winname窗口的名字callback回调函数userdata给回调函数的参数
# 鼠标回调函数传入到callback参数上去
def mouse_callback(event, x, y, flags, userdata)enent鼠标事件x横坐标y纵坐标flags事件组合userdata与cv2.setMouseCallback中的userdata对应用于传参
鼠标事件event对应EVENT_MOUSEMOVE鼠标移动EVENT_LBUTTONDOWN按下鼠标左键EVENT_RBUTTONDOWN按下鼠标右键EVENT_LBUTTONUP左键释放EVENT_RBUTTONUP右键释放EVENT_LBUTTONDBLCLK左键双击EVENT_RBUTTONDBLCLK右键双击
3.1 获取鼠标点击的坐标
import cv2
import numpy as np# 回调函数鼠标点击输出点击的坐标
# 事件鼠标移动、左键、右键横坐标纵坐标组合键setMouseCallback的userdata用于传参
def mouse_callback(event, x, y, flags, userdata):# 如果鼠标左键点击则输出横坐标和纵坐标if event cv2.EVENT_LBUTTONDOWN:print(f({x}, {y}))# 在图像上绘制点cv2.circle(img, (x, y), 3, (0, 0, 255), -1)# 在图像上添加坐标文本# 图像文本内容坐标点字体类型字体大小颜色字体粗细cv2.putText(img, f({x},{y}), (x, y),cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)# 获取指定像素点的颜色pixel_color img[x, y]print(颜色值BGR, pixel_color)img cv2.imread(lena.jpg)# 创建窗口
cv2.namedWindow(Point Coordinates)# 将回调函数绑定到窗口
cv2.setMouseCallback(Point Coordinates, mouse_callback)# 显示图像
while True:cv2.imshow(Point Coordinates, img)k cv2.waitKey(1) 0xFF# 按esc键退出if k 27:break
cv2.destroyAllWindows()3.2 获取鼠标点击像素点的颜色
# 获取指定像素点的颜色
pixel_color img[x, y]
print(颜色值BGR, pixel_color)3.3 在鼠标点击的位置生成圆
import cv2img cv2.imread(lena.jpg)# 回调函数鼠标点击输出点击的坐标
# 事件鼠标移动、左键、右键横坐标纵坐标组合键setMouseCallback的userdata用于传参
def mouse_callback(event, x, y, flags, userdata):# 如果鼠标左键点击则输出横坐标和纵坐标if event cv2.EVENT_LBUTTONDOWN:print(f({x}, {y}))# 在图像上绘制圆cv2.circle(img, (x, y), 100, (0, 0, 255), -1)# 创建新窗口
cv2.namedWindow(mouse)# 将回调函数绑定在mouse窗口
cv2.setMouseCallback(mouse, mouse_callback)while True:cv2.imshow(mouse, img)k cv2.waitKey(1) 0xFF# 按esc键退出if k 27:break
cv2.destroyAllWindows()3.4 通过拖动鼠标来绘制填充矩形
在用QQ截图的时候会有绘制矩形框的选项使用OpenCV来进行模拟
思路
鼠标左键点击开始进行绘制鼠标未拖动则生成圆点鼠标拖动则绘制矩形最后在图像上生成矩形框 可用到的event事件 EVENT_LBUTTONDOWN按下鼠标左键EVENT_MOUSEMOVE鼠标移动EVENT_LBUTTONUP左键释放 import cv2
import numpy as npimg cv2.imread(lena.jpg)drawing False # 如果按下鼠标则为真
start_x, start_y -1, -1# 回调函数鼠标点击输出点击的坐标
# 事件鼠标移动、左键、右键横坐标纵坐标组合键setMouseCallback的userdata用于传参
def mouse_callback(event, x, y, flags, userdata):global start_x, start_y, drawing# 鼠标左键单击if event cv2.EVENT_LBUTTONDOWN:drawing Truestart_x, start_y x, y# 鼠标移动elif event cv2.EVENT_MOUSEMOVE:if drawing True:cv2.rectangle(img, (start_x, start_y), (x, y), (0, 0, 255), -1)# 鼠标左键松开elif event cv2.EVENT_LBUTTONUP:drawing False# 创建新窗口
cv2.namedWindow(mouse)# 将回调函数绑定在mouse窗口
cv2.setMouseCallback(mouse, mouse_callback)while True:cv2.imshow(mouse, img)k cv2.waitKey(1) 0xFF# 按esc键退出if k 27:break
cv2.destroyAllWindows()3.5 通过拖动鼠标绘制未填充矩形
import cv2
import numpy as npimg cv2.imread(lena.jpg)drawing False # 如果按下鼠标则为真
start_x, start_y -1, -1# 回调函数鼠标点击输出点击的坐标
# 事件鼠标移动、左键、右键横坐标纵坐标组合键setMouseCallback的userdata用于传参
def mouse_callback(event, x, y, flags, userdata):global start_x, start_y, drawing# 鼠标左键单击if event cv2.EVENT_LBUTTONDOWN:drawing Truestart_x, start_y x, y# 鼠标移动elif event cv2.EVENT_MOUSEMOVE:pass# 鼠标左键松开elif event cv2.EVENT_LBUTTONUP:drawing Falsecv2.rectangle(img, (start_x, start_y), (x, y), (0, 0, 255), 3)# 创建新窗口
cv2.namedWindow(mouse)# 将回调函数绑定在mouse窗口
cv2.setMouseCallback(mouse, mouse_callback)while True:cv2.imshow(mouse, img)k cv2.waitKey(1) 0xFF# 按esc键退出if k 27:break
cv2.destroyAllWindows()3.6 使用鼠标选点绘制多边形
import cv2
import numpy as npimg cv2.imread(lena.jpg)xys []# 回调函数鼠标点击输出点击的坐标
# 事件鼠标移动、左键、右键横坐标纵坐标组合键setMouseCallback的userdata用于传参
def mouse_callback(event, x, y, flags, userdata):global xys, img# 鼠标左键单击if event cv2.EVENT_LBUTTONDOWN:xys.append([x, y])cv2.circle(img, (x, y), 5, (0, 0, 255), -1)# 鼠标右键单击elif event cv2.EVENT_RBUTTONDOWN:pts np.array(xys, np.int32)# 画多条线图像点集合是否闭合颜色粗细cv2.polylines(img, [pts], True, (0, 0, 0), 2)xys []# 创建新窗口
cv2.namedWindow(mouse)# 将回调函数绑定在mouse窗口
cv2.setMouseCallback(mouse, mouse_callback)while True:cv2.imshow(mouse, img)k cv2.waitKey(1) 0xFF# 按esc键退出if k 27:break
cv2.destroyAllWindows()按照鼠标选点的先后位置绘制多边形 如果相同选点但顺序不同绘制的图像也不同
3.7 按住鼠标左键进行绘图
可以想象成绘图工具中的橡皮擦操作
import cv2
import numpy as npimg cv2.imread(lena.jpg)drawing False # 按下鼠标左键响应# 回调函数鼠标点击输出点击的坐标
# 事件鼠标移动、左键、右键横坐标纵坐标组合键setMouseCallback的userdata用于传参
def mouse_callback(event, x, y, flags, userdata):global drawing# 鼠标左键单击if event cv2.EVENT_LBUTTONDOWN:drawing True# 鼠标移动elif event cv2.EVENT_MOUSEMOVE:if drawing True:cv2.circle(img, (x, y), 5, (255, 255, 255), -1)# 鼠标左键释放elif event cv2.EVENT_LBUTTONUP:drawing False# 创建新窗口
cv2.namedWindow(mouse)# 将回调函数绑定在mouse窗口
cv2.setMouseCallback(mouse, mouse_callback)while True:cv2.imshow(mouse, img)k cv2.waitKey(1) 0xFF# 按esc键退出if k 27:break
cv2.destroyAllWindows()