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,感兴趣区域,是一个图中的一个子区 ...
随机推荐
- 常用函数式接口与Stream API简单讲解
常用函数式接口与Stream API简单讲解 Stream简直不要太好使啊!!! 常用函数式接口 Supplier<T>,主要方法:T get(),这是一个生产者,可以提供一个T对象. C ...
- POJ 3087:Shuffle'm Up
Shuffle'm Up Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7364 Accepted: 3408 Desc ...
- POJ 1011:Sticks 经典搜索
Sticks Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 128734 Accepted: 30173 Descrip ...
- C#调用C++系列二:传结构体
这一篇记录下C#调用C++的结构体的方式来使用OpenCV的数据格式,这里会有两种方式,第一种是C#传一个结构体和图像的路径给C++,然后C++将图像加载进来,再把传进来的结构体填满即可,第二种是C# ...
- win10编译jpeglib
jpeglib看名字都大概知道和图像格式jpg或jpeg有关了,是一个常用的图像处理软件都会依赖的开源库. 首先去官网下载jpeglib的源码,直接取这里下载:http://www.ijg.org/f ...
- no.9亿级用户下的新浪微博平台架构读后感
微博平台的第三代技术体系,使用正交分解法建立模型:在水平方向,采用典型的三级分层模型,即接口层.服务层与资源层:在垂直方向,进一步细分为业务架构.技术架构.监控平台与服务治理平台. 水平分层 (1)接 ...
- POJ-1733 Parity game(带权并查集区间合并)
http://poj.org/problem?id=1733 题目描述 你和你的朋友玩一个游戏.你的朋友写下来一连串的0或者1.你选择一个连续的子序列然后问他,这个子序列包含1的个数是奇数还是偶数.你 ...
- SQL优化——ORACLE
SQL优化——ORACLE 索引是由Oracle维护的可选结构,为数据提供快速的访问.准确地判断在什么地方需要使用索引是困难的,使用索引有利于调节检索速度. 当建立一个索引时,必须指定用于跟踪的表名以 ...
- UML-领域模型的精化
拙劣的分类和错误的概括是混乱生活的祸根.--H.G.Wells的总结 1.is-a原则 子类定义的成员变量.方法与超类必须一致.即:不能多,也不能少. 子类是“一种”超类.CreditPayment是 ...
- JavaWeb之Servlet入门(一)
1. Servlet介绍 Servlet(Server Applet),全称Java Servlet,是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容. 2. ...