python opencv鼠标交互操作的实用指南

目录
  • 前言
  • cv2.setMouseCallback(windowName, onMouse [, param])
  • 鼠标回调函数:onMouse(event, x, y, flags, param)
  • 示例
  • 总结

前言

opencv的鼠标交互操作主要通过两个函数实现:

  • 第一个是cv2.setMouseCallback(windowName, onMouse [, param])
  • 第二个是setMouseCallback()的第二个参数,称为鼠标回调函数onMouse(event, x, y, flags, param)

下面分别对二者进行说明,并举一个简单的例子说明其用法。

cv2.setMouseCallback(windowName, onMouse [, param])

参数说明:

  • windowName:必需。类似于cv.imshow()函数,opencv具体操作哪个窗口以窗口名作为识别标识,这有点类似窗口句柄的概念。
  • onMouse:必需。鼠标回调函数。鼠标回调函数的定义是onMouse(event, x, y, flags, param),我们想要做什么鼠标操作,都是在这个函数内实现。
  • param:可选。请注意到onMouse里面也有一个param参数,它与是setMouseCallback里的param是同一个,更直白一点说,这个param是onMouse和setMouseCallback之间的参数通信接口。

鼠标回调函数:onMouse(event, x, y, flags, param)

这个参数列表不要改变它,除了param外其他都是由回调函数自动获取值。

参数说明:

  • event:由回调函数根据鼠标对图像的操作自动获得,内容包含左键点击,左键弹起,右键点击...等等等非常多的操作。
  • x,y:由回调函数自动获得,记录了鼠标当前位置的坐标,坐标以图像左上角为原点(0, 0),x方向向右为正,y方向向下为正。
  • flags:记录了一些专门的操作,下面有说明。
  • param:从setMouseCallback()里传递过来的参数。该参数在setMouseCallback()处是可选参数,所以可以不设置。

event和flags的种类:

可以使用如下代码获得event的种类

# -*- coding: utf-8 -*-
import cv2
events = [i for i in dir(cv2) if 'EVENT' in i]
print(events)

结果分为两部分,下面以EVENT_FLAG_开头的是flags对应的状态,其它的是event对应的状态。
flags和event似乎不能同时起作用,也就是说,我们无法通过同时判断这两个条件来实现组合键操作。

[‘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']

示例

下面是一个简单的示例,运行程序后,我们可以通过鼠标左键单击来画一些十字线。

# -*- coding: utf-8 -*-

import cv2
import numpy as np

WIN_NAME = 'pick_points'

def onmouse_pick_points(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        print('x = %d, y = %d' % (x, y))
        cv2.drawMarker(param, (x, y), (0, 255, 0))

if __name__ == '__main__':
    image = np.zeros((256, 256, 3), np.uint8)
    cv2.namedWindow(WIN_NAME, 0)
    cv2.setMouseCallback(WIN_NAME, onmouse_pick_points, image)
    while True:
        cv2.imshow(WIN_NAME, image)
        key = cv2.waitKey(30)
        if key == 27:  # ESC
            break
    cv2.destroyAllWindows()

上面程序中有几个注意点:

  • setMouseCallback()中的param参数我们传递了image进去,也就是说鼠标回调函数onmouse_pick_points()中的param就是image,画十字线的操作在鼠标回调函数中,该参数在onmouse_pick_points中的变化可以保留到函数外,可以理解为C++的引用传递,或C语言的指针传递。
  • 需要一个无限循环来刷新图像。
  • 无限循环的退出条件由键盘获取,cv2.waitKey()用来获取键盘的按键,当我们点ESC后就可以退出。

这里点了三次左键,终端输出以下内容:

x = 60, y = 55
x = 206, y = 113
x = 114, y = 192

并得到这样一张图像:

总结

到此这篇关于python opencv鼠标交互操作的文章就介绍到这了,更多相关python opencv鼠标交互操作内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python OpenCV实现鼠标画框效果

    使用Python+OpenCV实现鼠标画框的代码,供大家参考,具体内容如下 # -*-coding: utf-8 -*- """ @Project: IntelligentManufacture @File : user_interaction.py @Author : panjq @E-mail : pan_jinquan@163.com @Date : 2019-02-21 15:03:18 """ # -*- coding: utf-8 -

  • python3.6+opencv3.4实现鼠标交互查看图片像素

    在利用opencv进行图片处理时,经常需要查看图片关心区域或位置的像素数值,苦于没有应手的小软件,我用python3.6+opencv3.4简单编制一个小工具,供大家使用. 流程 1.建立标准的鼠标交互函数,当鼠标在图像上移动时,即时显示鼠标位置的像素数值(opencv像素为BGR格式). 2.建立图像窗口,绑定鼠标回调函数. 3.按下'q'键,退出. 4.仅需15行代码,就是这么简单. 代码 # -*- coding: utf-8 -*- import cv2 img= cv2.imread(

  • opencv+python实现鼠标点击图像,输出该点的RGB和HSV值

    我就废话不多说了,大家还是直接看代码吧! import cv2 # 读取图片并缩放方便显示 img = cv2.imread('D:/6.jpg') height, width = img.shape[:2] size = (int(width * 0.2), int(height * 0.2)) # 缩放 img = cv2.resize(img, size, interpolation=cv2.INTER_AREA) # BGR转化为HSV HSV = cv2.cvtColor(img, c

  • opencv3/python 鼠标响应操作详解

    鼠标回调函数: def setMouseCallback( windowName, #窗口名称 onMouse, #鼠标响应处理函数 param=None) #处理函数的ID event鼠标事件: event: EVENT_LBUTTONDBLCLK = 7 左键双击 EVENT_LBUTTONDOWN = 1 左键点击 EVENT_LBUTTONUP = 4 左键释放 EVENT_MBUTTONDBLCLK = 9 中间释放 EVENT_MBUTTONDOWN = 3 中间点击 EVENT_M

  • python opencv鼠标事件实现画框圈定目标获取坐标信息

    本文实例为大家分享了python-opencv鼠标事件画框圈定目标的具体代码,供大家参考,具体内容如下 在视频/相机中,用鼠标画矩形框,圈定目标,从而获得鼠标的起始坐标点a.终止坐标点b # -*- coding: utf-8 -*- """ Created on Tue Dec 27 09:32:02 2016 @author: http://blog.csdn.net/lql0716 """ import cv2 import numpy a

  • python opencv鼠标交互操作的实用指南

    目录 前言 cv2.setMouseCallback(windowName, onMouse [, param]) 鼠标回调函数:onMouse(event, x, y, flags, param) 示例 总结 前言 opencv的鼠标交互操作主要通过两个函数实现: 第一个是cv2.setMouseCallback(windowName, onMouse [, param]) 第二个是setMouseCallback()的第二个参数,称为鼠标回调函数onMouse(event, x, y, fl

  • python opencv鼠标画矩形框之cv2.rectangle()函数

    目录 cv2.rectangle()函数说明 参数说明 利用鼠标回调函数交互式画矩形框 总结 关于鼠标回调函数的说明可以参考:opencv-python的鼠标交互操作 cv2.rectangle()函数说明 参数说明 导入cv2后,通过help(cv2.rectangle)可以看到函数的帮助文档如下: rectangle(...) rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) -> img . @brief D

  • python opencv鼠标画点之cv2.drawMarker()函数

    目录 前言 cv2.drawMarker()函数说明 参数说明 利用鼠标回调函数交互式画点 例1,简单的例子 例2,删除功能 总结 前言 这里所谓画点的意思是指在单一像素点上画一个标记符,而不是画小圆点.使用的函数是cv2.drawMarker(img, position, color, ...) 关于鼠标回调函数的说明可以参考:opencv-python的鼠标交互操作 cv2.drawMarker()函数说明 参数说明 导入cv2后,通过help(cv2.drawMarker)可以看到函数的帮

  • python模拟鼠标拖动操作的方法

    本文实例讲述了python模拟鼠标拖动操作的方法.分享给大家供大家参考.具体如下: pdf中的书签只有页码,准备把现有书签拖到一个目录中,然后添加自己页签.重复的拖动工作实在无趣,还是让程序帮我实现吧,我可以喝点水,休息一下了 1. Python代码 复制代码 代码如下: # # _*_ coding:UTF-8 _*_ __author__ = 'wp' import win32api import win32con import win32gui from ctypes import * i

  • python和mysql交互操作实例详解【基于pymysql库】

    本文实例讲述了python和mysql交互操作.分享给大家供大家参考,具体如下: python要和mysql交互,我们利用pymysql这个库. 下载地址: https://github.com/PyMySQL/PyMySQL 安装(注意cd到我们项目的虚拟环境后): cd 项目根目录/abc/bin/ #执行 ./python3 -m pip install pymysql 稍等片刻,就会把pymysql库下载到项目虚拟环境abc/lib/python3.5/site-packages中.(注

  • Python+OpenCV之形态学操作详解

    目录 一. 腐蚀与膨胀 1.1 腐蚀操作 1.2 膨胀操作 二. 开运算与闭运算 2.1 开运算 2.2 闭运算 三.梯度运算 四.礼帽与黑帽 4.1 礼帽 4.2 黑帽 一. 腐蚀与膨胀 1.1 腐蚀操作 import cv2 import numpy as np img = cv2.imread('DataPreprocessing/img/dige.png') cv2.imshow("img", img) cv2.waitKey(0) cv2.destroyAllWindows(

  • 玩转python selenium鼠标键盘操作(ActionChains)

    用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击.双击.点击鼠标右键.拖拽等等.而selenium给我们提供了一个类来处理这类事件--ActionChains selenium.webdriver.common.action_chains.ActionChains(driver) 这个类基本能够满足我们所有对鼠标操作的需求. 1.ActionChains基本用法 首先需要了解ActionChains的执行原理,当你调用ActionChains的方法时,不会立即执行

  • Python Opencv轮廓常用操作代码实例解析

    1.颜色空间转换 使用cv2.cvtColor(input_image ,flag),flag为转换类型 常用的转换类型有: BGR和灰度图的转换使用 cv2.COLOR_BGR2GRAY BGR和HSV的转换使用 cv2.COLOR_BGR2HSV img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 2.二值化 ret, dst = cv2.threshold(src, thresh, maxval, type) src:表示的是图片源(灰度图)

  • Python+OpenCV实现鼠标画瞄准星的方法详解

    目录 函数说明 cv2.circle() cv2.line() 简单的例子 利用鼠标回调函数画瞄准星 所谓瞄准星指的是一个圆圈加一个圆圈内的十字线,就像玩射击游戏狙击枪开镜的样子一样.这里并不是直接在图上画一个瞄准星,而是让这个瞄准星跟着鼠标走.在图像标注任务中,可以利用瞄准星进行一些辅助,特别是回归类的任务,使用该功能可以使得关键点的标注更加精准. 关于鼠标回调函数的说明可以参考:opencv-python的鼠标交互操作 函数说明 import cv2后,可以分别help(cv2.circle

随机推荐