前言

opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍opencv-python处理鼠标事件,坚持学习,共同进步。

系统环境

系统:win_x64;

python版本:python3.5.2;

opencv版本:opencv3.3.1;

内容安排

1.知识点介绍;

2.测试代码;

具体内容

1.知识点介绍;

鼠标事件使用的包是cv2,函数主要是cv2.setMouseCallback()函数;

一般首先创建鼠标事件回调函数,当鼠标事件发生时就会被执行。

通过鼠标事件获得相对应图像的坐标执行对应的功能。

所有鼠标事件回调函数都有一个统一的格式,不同的是被调用之后的功能。

1.1 查看所有被支持的鼠标事件

import cv2

events = [i for i in dir(cv2) if 'EVENT' in i]

print (events)

鼠标事件包括如下内容:

'EVENT_FLAG_ALTKEY', 'EVENT_FLAG_CTRLKEY', 'EVENT_FLAG_LBUTTON',

'EVENT_FLAG_MBUTTON', 'EVENT_FLAG_RBUTTON', 'EVENT_FLAG_SHIFTKEY',

'EVENT_LBUTTONDBLCLK', 'EVENT_LBUTTONDOWN', 'EVENT_LBUTTONUP',

'EVENT_MBUTTONDBLCLK', 'EVENT_MBUTTONDOWN', 'EVENT_MBUTTONUP',

'EVENT_MOUSEHWHEEL', 'EVENT_MOUSEMOVE', 'EVENT_MOUSEWHEEL',

'EVENT_RBUTTONDBLCLK', 'EVENT_RBUTTONDOWN', 'EVENT_RBUTTONUP'

1.2 在鼠标双击位置绘制一个圆;

1)定义鼠标事件回调函数;

# mouse callback function

def draw_circle(event, x, y, flags, param):

if event == cv2.EVENT_LBUTTONDBLCLK:

cv2.circle(img, (x, y), 100, (255, 0, 0), -1)

2)将图像窗口与回调函数绑定;

cv2.setMouseCallback('image', draw_circle)

1.3 根据选择的模式在拖动鼠标时绘制矩形,故回调函数包含两个部分;

1)回调函数绘图的步骤:step1,按下左键时记录起始位置坐标;step2,按下左键并移动时根据模式的选择绘制图形;step3,鼠标松开时停止绘图;

2)将回调函数和窗口绑定在一起,同时在循环中将‘m’键与模式转换绑定在一起;

具体代码可参考测试代码;

2. 测试代码;

2.1在图像双击位置画圆;

import cv2

import numpy as np

# mouse callback function

def draw_circle(event, x, y, flags, param):

if event == cv2.EVENT_LBUTTONDBLCLK:

cv2.circle(img, (x, y), 100, (255, 0, 0), -1)

# 创建图像与窗口并将窗口与回调函数绑定

img = np.zeros((500, 500, 3), np.uint8)

cv2.namedWindow('image')

cv2.setMouseCallback('image', draw_circle)

while (1):

cv2.imshow('image', img)

if cv2.waitKey(1)&0xFF == ord('q'):#按q键退出

break

cv2.destroyAllWindows()

2.2 选择不同的模式在拖动鼠标时绘制矩形;

import cv2

import numpy as np

#当鼠标按下时为True

drawing = False

#如果mode为true时绘制矩形,按下'm'变成绘制曲线

mode = True

ix,iy = -1,-1

#创建回调函数

def draw_circle(event,x,y,flags,param):

global ix,iy,drawing,mode

#当按下左键时返回起始位置坐标

if event == cv2.EVENT_LBUTTONDOWN:

drawing = True

ix,iy=x,y

#当左键按下并移动时绘制图形,event可以查看移动,flag查看是否按下

elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_FLAG_LBUTTON:

if drawing == True:

if mode == True:

cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)

else:

#绘制圆圈,小圆点连在一起就成了线,3代表笔画的粗细

cv2.circle(img,(x,y),3,(0,0,255),-1)

#当鼠标松开时停止绘图

elif event ==cv2.EVENT_LBUTTONUP:

drawing == False

'''

下面把回调函数与OpenCV窗口绑定在一起,在主循环中将'm'键与模式转换绑定在一起

'''

img = np.zeros((500,500,3),np.uint8)

cv2.namedWindow('image')

cv2.setMouseCallback('image',draw_circle)

while(1):

cv2.imshow('image',img)

k=cv2.waitKey(1)

if k ==ord('m'):

mode=not mode

elif k==ord('q'):

break

cv2.destroyAllWindows()

参考

python鼠标点击事件event_opencv-python教程学习系列5-处理鼠标事件相关推荐

  1. python开发的录音机(二)让鼠标点击与开始录音同步(录制与回放鼠标宏)

    当我们用录音机录网上的音乐时,有一个场景让人困扰: 比如听以下页面中的一首歌,要在页面上点击一下播放按钮 如果想把这一首歌录下来,当点击了播放按钮再去点录音机的录音按钮时,中间有一个时间差.可能一不小 ...

  2. python 几何教学_opencv-python教程学习系列11-几何变换

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍几何变换,坚持学习,共同进步. 系统环境 系统:win7_x64; python版本:python ...

  3. opencv-python教程学习系列2-读取/显示/保存图像

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像的读取.显示以及保存,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: ...

  4. opencv-python教程学习系列13-图像平滑

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像平滑,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 系统: ...

  5. opencv-python教程学习系列8-opencv图像算术运算

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像的算术运算,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 ...

  6. 鼠标点击某处时可以让小精灵移动到鼠标点击的地方, 让精灵跟随鼠标移动

    鼠标点击页面某处的时候可以让小精灵移动到该处 css代码: <style>html,body {height: 100%;width: 100%;background-color: bla ...

  7. python webbrowser点击_用 Python 实现手机自动答题,这下百万答题游戏谁也玩不过我!...

    引言 如果谈到这几年手机上各平台最常见的引流福利,必然是答题赢大奖系列小游戏了.像什么头号英雄,百万玩家之类的,充斥在我们生活中,同时也成为了我们生活中常见的娱乐方式.但是有时候就会想,能不能实现手机 ...

  8. python自动点击脚本_[Python] 【Python3】教你写页游自动化Python脚本 3.取色,大漠识别和后台点击...

    [Python] 纯文本查看 复制代码import win32com.client as wc,win32gui as wg,threading as xc,time,tkinter as tk,wi ...

  9. python gtk页面布局_Python GTK + 3教程 学习笔记 ——(5)布局 与 glade

    GTK的布局容器分为两种,一种是single-child容器,继承自Gtk.Bin,另一种是继承自Gtk.Container的multiple-child容器.关于这两类Gtk.Bin和Gtk.Con ...

最新文章

  1. java http头信息
  2. Java设计模式(二十二):原型设计模式
  3. 面积积分_被积函数的奇偶性问题(定积分、重积分、线积分、面积分)
  4. pmp每日三题(2022年3月14日)
  5. java math.cos_Java Math类静态double cos(double d)示例
  6. 非标准语法;请使用 _一文读懂使用MCU SPI访问具有非标准SPI接口ADC的方法
  7. 白化(Whitening): PCA 与 ZCA (转)
  8. IDC:2016年第四季度全球企业存储市场出现下滑
  9. Entity Framework使用Sqlite时的一些配置
  10. Linux宝库幕后推手齐聚OpenInfra Days China
  11. TCP/IP详解 卷一笔记
  12. 鸿蒙石boss 怎么杀,《仙侠世界》沧海岛副本介绍 沧海岛副本怎么玩
  13. 资源共享——FTP服务
  14. java 获取list的泛型_获取java.util.List的泛型类型
  15. Kubernetes | 《Kubernetes in Action中文版》第8章错误
  16. python爬取视频--下载2019巴菲特股东大会直播视频
  17. 域名证书到期监控告知
  18. android 手机文件及文件夹目录详解
  19. 我的2017年文章汇总——深度学习篇
  20. 文件上传并展示上传文件

热门文章

  1. 银行信用卡客户价值分析(Python数据分析)
  2. Linux 下查看硬盘 smart 信息
  3. mysql和oceanbase区别,OceanBase基本概念
  4. ms office excel2013教程 - 合并计算
  5. ctfshow七夕杯复现
  6. swft入门学习-第二天
  7. MYSQL常用的数学函数
  8. Android App接入支付功能
  9. 下载百度编辑器ueditor
  10. a标签下载静态文件 失败-未发现文件