使用Python和OpenCV捕获鼠标事件,并裁剪图像

  • 1. 效果图
  • 2. 源码
  • 参考

这篇博客将介绍如何使用Python和OpenCV捕获鼠标事件。还演示了如何快速裁剪和提取图像区域,这在为自己的自定义对象检测器创建训练数据时特别有用。

该示例将点击图片,并拖动一个矩形的兴趣区(ROI),然后从图像中裁剪出来。

1. 效果图

拿我最喜欢的小林老师的漫画图,截图图像中的薰衣草图片ROI,并展示,效果图如下:

在截一下郁金香,郁金香ROI下图右侧~~

2. 源码

# 使用Python,OpenCV捕获鼠标单击事件
# USAGE
# python click_and_crop.py --image lin_image.jpg# 导入必要的类
import argparse
import cv2
import imutils# 初始化参考点列表和布尔值标志:是否正在执行裁剪
refPt = []
cropping = False# 点击并裁剪ROI区域
# -events 鼠标事件(如按下鼠标左键,释放鼠标左键,鼠标移动等)
# -x x坐标
# -y y坐标
# -flages params 其他参数
def click_and_crop(event, x, y, flags, param):# 获取全局变量的引用global refPt, cropping# 如果鼠标左被单击,记录(x,y)坐标并显示裁剪正在进行if event == cv2.EVENT_LBUTTONDOWN:refPt = [(x, y)]cropping = True# 检测鼠标左键是否释放elif event == cv2.EVENT_LBUTTONUP:# 记录结束(x,y)坐标,并显示裁剪结束refPt.append((x, y))cropping = False# 在感兴趣区域记录矩形区域cv2.rectangle(image, refPt[0], refPt[1], (0, 255, 0), 2)cv2.imshow("image", image)# 构建命令行参数及解析
# -image 原始图像的路径
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to the image")
args = vars(ap.parse_args())# 加载图像,并复制,设置鼠标回调函数
image = cv2.imread(args["image"])
image = imutils.resize(image, width=500)
clone = image.copy()
cv2.namedWindow("image")
cv2.setMouseCallback("image", click_and_crop)# 保持循环直至按下‘q’键
while True:# 展示图像并等待按下键cv2.imshow("image", image)key = cv2.waitKey(1) & 0xFF# 如果按下‘r’键,则重置裁剪区域if key == ord("r"):image = clone.copy()# 按下‘q’键,跳出循环elif key == ord("q"):break# 如果参考点列表里有俩个点,则裁剪区域并展示
if len(refPt) == 2:roi = clone[refPt[0][1]:refPt[1][1], refPt[0][0]:refPt[1][0]]cv2.imshow("ROI", roi)cv2.waitKey(0)# 关闭所有打开的窗口
cv2.destroyAllWindows()

参考

  • https://www.pyimagesearch.com/2015/03/09/capturing-mouse-click-events-with-python-and-opencv/

使用Python和OpenCV捕获鼠标事件,并裁剪图像相关推荐

  1. 使用Python,OpenCV捕获关键事件,并进行视频剪辑

    使用Python,OpenCV捕获关键事件,并进行视频剪辑 1. 效果图 2. 原理 2.1 步骤 2.2 如何找到HSV空间值呢? [[[60 255 255]]] 3. 源码 3.1 keycli ...

  2. Python机器视觉--OpenCV入门--鼠标事件与TrackBar控件(含小项目:OpenCV调色板)

    1.鼠标事件与TrackBar控件 1.1控制鼠标 OpenCV允许我们对窗口上的鼠标动作做出响应. setMouseCallback(winname, callback, userdata) win ...

  3. 使用Python,OpenCV和Scikit-Image检测低对比度图像

    使用Python,OpenCV和Scikit-Image检测低对比度图像 1. 效果图 2. 原理 3. 源码 参考 这篇博客将介绍如何使用Python,OpenCV和Scikit-Image检测低对 ...

  4. python八角图形绘制_(Python)从零开始,简单快速学机器仿人视觉Opencv—第四节:OpenCV处理鼠标事件...

    准备工作 使用工具:Python3.5 涉及包:cv2 numpy 涉及函数 函数:cv2.setMouseCallback() 任务开始 简单的程序,在图片上双击过的位置绘制一个圆圈 任务1.创建鼠 ...

  5. Python Opencv 实现鼠标事件(包含一个练习)——事件触发讲解·以及鼠标回调函数的实现

    文章目录 鼠标事件概述 鼠标事件发生的结构 鼠标回调函数的标准格式 opencv下包含的所有事件--包含flag和event(可以看一下,熟悉常见事件范围) 鼠标事件的实现函数 一个完整的鼠标事件由一 ...

  6. WPF,强制捕获鼠标事件,鼠标移出控件外依然可以执行强制捕获的鼠标事件

    在WPF中,只有鼠标位置在某个控件上的时候才会触发该控件的鼠标事件. 例如,有两个控件都注册了MouseDown和MouseUp事件,在控件1上按下鼠标,不要放开,移动到控件2上再放开. 在这个过程中 ...

  7. Python监听键盘和鼠标事件,并发送内容至邮箱!

    一. 环境以及工具 环境:win10,Python3.6 工具:JetBrains PyCharm 2018.1.4 二. 使用的第三方库: import os import smtplib #发送邮 ...

  8. opencv控制鼠标事件

    1.基础知识和API OpenCV允许我们对窗口上的鼠标动作做出响应.回调函数,就是执行以后会执行这个函数 cv2.setMouseCallback(winname, callback, userda ...

  9. 捕获鼠标事件-JavaScript入门基础(005)

    为页面增加与用户的交互是JavaScript的基本功能之一.那么我们如何能知道用户什么时候单击了鼠标,什么时候按下了键盘呢? 以上特定动作发生之后,会触发事件.通过事件处理器,我们就可以处理相应的事件 ...

最新文章

  1. pageadmin CMS网站建设教程:站点添加自定义字段
  2. 数据暑假实习面试_面试数据科学实习如何准备
  3. 自动驾驶——多传感器融合的学习笔记
  4. centos7 如何重启web服务_如何重启web服务器
  5. python中类的构成_Python中类型关系和继承关系实例详解
  6. c语言获取栈可用大小,[求助]求教各位大神如何获得C语言函数体的大小?
  7. 软件开发所需要的十三个文档
  8. Android 使用 Gradle 构建时,出现 Crunching Cruncher xxx.9.png failed 问题的解决方法
  9. AURIX TriCore学习笔记四:LwIP裸机移植
  10. Request库的相关用法
  11. Thunderbolt4,雷电4与USB4
  12. FCoin“出事”后,团队关键人物回复了!
  13. lcs算法c语言代码,LCS算法
  14. 联发科技与Orange合作加速物联网设备普及
  15. 笔耕不辍,学习习惯?兴趣爱好?源于对真知的热爱?
  16. 没有内存,怎么还能跑程序呢
  17. uniapp自定义tabbar必看
  18. 问财爬虫Python第三方包,仅供学习使用
  19. android点对点 sdk,Client(SDK)_开发文档_容联云通讯
  20. netstat输出内容详解

热门文章

  1. 2021年大数据Kafka(三):❤️Kafka的集群搭建以及shell启动命令脚本编写❤️
  2. 2021年大数据环境搭建(一):​​​​​​​​​​​​​​​​​​​​​Hadoop编译
  3. Django Request对象3.3
  4. Android 监听多个Spinner 的点击事件
  5. Android TextView 数字后面追加2个0 或者保留小数点后面2位
  6. Android include 标签使用
  7. ASP.NET MVC 2示例Tailspin Travel
  8. SpringBoot02_构建rest工程完成第一个controller类
  9. JS中的call()方法和apply()方法用法总结
  10. YML(2)yml 语法