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,感兴趣区域,是一个图中的一个子区 ...
随机推荐
- 剑指offer_1.24_Day_4
构建乘积数组 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1] ...
- Jeesite 定时任务 Task
转自 http://blog.lunhui.ren/archives/280 第一种方式 一. spring-context.xml配置加入 xmlns:task=”http://www.spring ...
- CocoaPods安装/卸载/初始化等常用操作
CocoaPods的官网:https://cocoapods.org/,官方指导文档https://guides.cocoapods.org/ 1)ruby gem源更换国内源gems.ruby-ch ...
- 第二章,C语言概述
2.1 简单的C程序示例 #include <stdio.h> #include <stdlib.h> int main(void) { int num; num=; prin ...
- 使用js检测页面是在electron app中运行还是在浏览器中运行
<script type="text/javascript"> var userAgent = navigator.userAgent.toLowerCase() ){ ...
- Vue组件template模板字符串几种写法
在定义Vue组件时,组件的模板template选项需要的是一个字符串,当其内容较复杂需要换行时,需要简单处理一下,具体有五种方式: 方式一:使用 \ 转义换行符 <!DOCTYPE html&g ...
- 基于python的小波阈值去噪算法
https://blog.csdn.net/alwaystry/article/details/52756051 发表于 2018-01-10 16:32:17 嵌入式设计应用 +关注 小波图像去噪原 ...
- 2020牛客寒假算法基础集训营3 B 牛牛的DRB迷宫II
题目描述 牛牛有一个n*m的迷宫,对于迷宫中的每个格子都为'R','D','B'三种类型之一,'R'表示处于当前的格子时只能往右边走'D'表示处于当前的格子时只能往下边走,而'B'表示向右向下均可以走 ...
- A4纸表格打印
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- JavaScript 之 原型及原型链
对象[回顾] 通过字面量创建对象 //通过字面量创建对象 var obj1 = { name:'Jack', age: 18 } 通过系统自带的构造函数构造对象 // 通过系统自带的构造函数构造对象 ...