python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python opencv鼠标交互操作

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

作者:拜阳

最近的工作经常需要对图像进行操作,也需要用鼠标对图像进行各种操作,所以下面这篇文章主要给大家介绍了关于python opencv鼠标交互操作的相关资料,需要的朋友可以参考下

前言

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

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

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

参数说明:

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

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

参数说明:

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()

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

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

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

并得到这样一张图像:

总结

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

您可能感兴趣的文章:
阅读全文