昊虹AI笔记网

 找回密码
 立即注册
搜索
查看: 825|回复: 0
收起左侧

Python-OpenCV下的窗口鼠标事件交互操作(实现鼠标移动轨迹的绘制)

[复制链接]

239

主题

241

帖子

928

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
928
昊虹君 发表于 2022-11-13 07:50 | 显示全部楼层 |阅读模式
Python-OpenCV下的窗口鼠标事件交互操作(实现鼠标移动轨迹的绘制)

可以用函数cv.setMouseCallback()和其相应的回调函数实现窗口窗口鼠标事件的设置。

关于函数cv.setMouseCallback()和其回调函数的详细介绍请大家参考下面这篇博文:
https://www.hhai.cc/thread-99-1-1.html

本篇博文给出Python示例代码,功能是实现鼠标移动轨迹的绘制。

代码如下:
代码中用到的图像百度网盘下载链接如下:
https://pan.baidu.com/s/1v6GMaxqHz7xNXhBwmW1aFQ?pwd=jfc4
[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-
# 出处:昊虹AI笔记网(hhai.cc)
# 用心记录计算机视觉和AI技术

# 博主微信/QQ 2487872782
# QQ群 271891601
# 欢迎技术交流与咨询

# OpenCV的版本为4.4.0

import cv2 as cv
import sys


def draw(event, x, y, flags, param):
    global img, pre_pts

    # 鼠标右键按下
    if event == cv.EVENT_RBUTTONDOWN:
        print('请点击鼠标左键进行轨迹的绘制。')

    # 鼠标左键按下
    if event == cv.EVENT_LBUTTONDOWN:
        pre_pts = (x, y)
        print('轨迹起始坐标为:{}, {}'.format(x, y))

    # 鼠标移动
    if event == cv.EVENT_MOUSEMOVE and flags == cv.EVENT_FLAG_LBUTTON:
        pts = (x, y)
        img = cv.line(img, pre_pts, pts, (0, 0, 255), 2, 5,0)
        pre_pts = pts
        cv.imshow('image', img)


if __name__ == '__main__':
    # 读取图像并判断是否读取成功
    img = cv.imread('F:/material/images/2022/2022-11/Light-blue-background.jpg')
    img1 = img.copy()
    if img is None:
        print('Failed to read image.')
        sys.exit()
    pre_pts = -1, -1
    cv.imshow('image', img)
    cv.setMouseCallback('image', draw)
    cv.waitKey(0)
    cv.destroyAllWindows()

运行结果如下:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|昊虹AI笔记网 ( 蜀ICP备2022024117号-1 )

GMT+8, 2024-5-4 17:39 , Processed in 0.020729 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表