Opencv笔记(五)——把鼠标当画笔
学习目标:
- 学习使用 OpenCV 处理鼠标事件
- 学会使用函数cv2.setMouseCallback()
简单演示:
首先我们来创建一个鼠标事件回调函数,但鼠标事件发生是他就会被执行。鼠标事件可以是鼠标上的任何动作,比如左键按下,左键松开,左键双击等。该函数还提供了鼠标点击的位置。
| Event | 中文释义 |
|---|---|
| cv2.EVENT_MOUSEMOVE | 鼠标移动 |
| cv2.EVENT_LBUTTONDOWN | 左键点击 |
| cv2.EVENT_RBUTTONDOWN | 右键点击 |
| cv2.EVENT_MBUTTONDOWN | 中间点击 |
|
cv2.EVENT_LBUTTONUP |
左键释放 |
| cv2.EVENT_RBUTTONUP | 右键释放 |
| cv2.EVENT_MBUTTONUP | 中间释放 |
| cv2.EVENT_LBUTTONDBLCLK | 左键双击 |
| cv2.EVENT_RBUTTONDBLCLK | 右键双击 |
| cv2.EVENT_MBUTTONDBLCLK | 中间双击 |
import numpy as np
import cv2
def draw_circle(event,x,y,flags,param):
if event==cv2.EVENT_LBUTTONUP :
cv2.circle(img,(x,y),20,(255,0,0),-1)
img = np.zeros((512,512,3), np.uint8)
cv2.namedWindow('opencv')
cv2.setMouseCallback('opencv',draw_circle)
while(1):
cv2.imshow('opencv',img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
- 先创建一个鼠标事件回调函数,event表示鼠标事件,x,y表示鼠标事件的位置,flags代表鼠标拖拽事件。自己在函数中定义事件的类型,上述代码定义的是左键释放画圈。
- cv2.setMouseCallback('Window_name',def),第一个参数是窗口名,第二个参数是用于处理的回调函数。
高级演示:
用鼠标左键点击后拖动画矩形,按下m建变换模式,改画圆。
import numpy as np
import cv2
drawing = False
mode = True
ix,iy = -1,-1
def draw_circle(event,x,y,flags,param):
global drawing,mode,ix,iy
if event==cv2.EVENT_LBUTTONDOWN:
drawing = True
ix,iy = x,y
elif event==cv2.EVENT_MOUSEMOVE :
if drawing == True:
if mode == True:
cv2.rectangle(img,(ix,iy),(x,y),(255,0,0),2)
else:
cv2.circle(img,(x,y),50,(0,255,0),3)
elif event == cv2.EVENT_LBUTTONUP:
drawing = False
img = np.zeros((512,512,3), np.uint8)
cv2.namedWindow('opencv')
cv2.setMouseCallback('opencv',draw_circle)
while(1):
cv2.imshow('opencv',img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
elif cv2.waitKey(1) &0xFF == ord('m'):
mode = not mode
cv2.imwrite('/home/wl/1.jpg',img)
cv2.destroyAllWindows()
Opencv笔记(五)——把鼠标当画笔的更多相关文章
- 【opencv学习笔记五】一个简单程序:图像读取与显示
今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...
- opencv笔记1:opencv的基本模块,以及环境搭建
opencv笔记1:opencv的基本模块,以及环境搭建 安装系统 使用fedora22-workstation-x86_64 安装opencv sudo dnf install opencv-dev ...
- 《MFC游戏开发》笔记五 定时器和简单动画
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9332377 作者:七十一雾央 新浪微博:http:// ...
- OpenCV笔记大集锦(转载)
整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ...
- C#可扩展编程之MEF学习笔记(五):MEF高级进阶
好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...
- opencv笔记6:角点检测
time:2015年10月09日 星期五 23时11分58秒 # opencv笔记6:角点检测 update:从角点检测,学习图像的特征,这是后续图像跟踪.图像匹配的基础. 角点检测是什么鬼?前面一篇 ...
- opencv笔记5:频域和空域的一点理解
time:2015年10月06日 星期二 12时14分51秒 # opencv笔记5:频域和空域的一点理解 空间域和频率域 傅立叶变换是f(t)乘以正弦项的展开,正弦项的频率由u(其实是miu)的值决 ...
- opencv笔记4:模板运算和常见滤波操作
time:2015年10月04日 星期日 00时00分27秒 # opencv笔记4:模板运算和常见滤波操作 这一篇主要是学习模板运算,了解各种模板运算的运算过程和分类,理论方面主要参考<图像工 ...
- opencv笔记3:trackbar简单使用
time:2015年 10月 03日 星期六 13:54:17 CST # opencv笔记3:trackbar简单使用 当需要测试某变量的一系列取值取值会产生什么结果时,适合用trackbar.看起 ...
- opencv笔记2:图像ROI
time:2015年 10月 03日 星期六 12:03:45 CST # opencv笔记2:图像ROI ROI ROI意思是Region Of Interests,感兴趣区域,是一个图中的一个子区 ...
随机推荐
- TP中统计指定字段的总数
如统计已激活设备数量和未激活设备数量 $condition = [ ['member_id', '=', $member_id] ]; $field = [ 'COUNT(IF(active_memb ...
- mysql 锁表的处理方式
MySQL错误:ERROR 1205 (HY000): Lock wait timeout 处理方案: 执行mysql命令:show full processlist; 然后找出插入语句的 ...
- 深入理解java虚拟机第五部分高效并发
volatile是java虚拟机提供最轻量级的同步机制. volatile两个特性:1,保证同步的变量对所有线程是可见的.虽然对所有线程是即时可见的,但是却不保证原子性,也就是不保证线程安全,比如对于 ...
- 第二章,C语言概述
2.1 简单的C程序示例 #include <stdio.h> #include <stdlib.h> int main(void) { int num; num=; prin ...
- Android自定义View——多边形网格属性图
1.初始化变量 2.属性图解 3.如果想切换到5.6.7边形等等,则必须修改下面几条数据 4.获取宽和高 5.绘制图形 1.开始画画前:我们要把画笔准备好,这里看代码就能明白意思了,接着把整个 ...
- Windows添加远程访问用户
Windows远程访问 命令:mstsc ------------------------------------------------------------------------------- ...
- 用Python读取一个文本文件并统计词频
刚刚在写文章时360浏览器崩溃了,结果内容还是找回来了,感谢博客园的自动保存功能!!! ------------恢复内容开始------------ 最近在学习Python,自己写了一个小程序,可以从 ...
- Day 9:双列集合Map及实现该接口的类的常用方法
为什么要学双列集合? 因为单列集合无法处理映射关系,会有成对出现的数据 Map接口 如果是实现了Map接口的集合类,具备的特点: 存储的数据都是以键值对的形式存在的,键不可重复,值可以重复 Map接 ...
- PAT A1018
A 1018 Public Bike Management 这个题目算是比较典型的一个.我分别用dfs,及dijkstra+dfs实现了一下. dfs实现代码: #include <cstdio ...
- POJ - 2976 Dropping tests(01分数规划---二分(最大化平均值))
题意:有n组ai和bi,要求去掉k组,使下式值最大. 分析: 1.此题是典型的01分数规划. 01分数规划:给定两个数组,a[i]表示选取i的可以得到的价值,b[i]表示选取i的代价.x[i]=1代表 ...