概述
OpenCV支持检测鼠标事件。这些鼠标事件包括鼠标单击(如左键向下,左键向上,左键双击等)和附加的OpenCV窗口上的移动。
1、学习目标
使用OpenCV处理鼠标事件
2、函数方法
(1)创建一个回调函数
(2)使用cv2.setMouseCallback(‘image’,click_event_callback_function)方法调用这个回调函数
3、程序
(1)先看看有哪些鼠标事件
import numpy as np
import cv2
events = [i for i in dir(cv2) if 'EVENT' in i]
print(events)
得到结果:
[‘EVENT_FLAG_ALTKEY’, ‘EVENT_FLAG_CTRLKEY’, ‘EVENT_FLAG_LBUTTON’, ‘EVENT_FLAG_MBUTTON’, ‘EVENT_FLAG_RBUTTON’, ‘EVENT_FLAG_SHIFTKEY’, ‘EVENT_LBUTTONDBLCLK’, ‘EVENT_LBUTTONDOWN’, ‘EVENT_LBUTTONUP’, ‘EVENT_MBUTTONDBLCLK’, ‘EVENT_MBUTTONDOWN’, ‘EVENT_MBUTTONUP’, ‘EVENT_MOUSEHWHEEL’, ‘EVENT_MOUSEMOVE’, ‘EVENT_MOUSEWHEEL’, ‘EVENT_RBUTTONDBLCLK’, ‘EVENT_RBUTTONDOWN’, ‘EVENT_RBUTTONUP’]
(2)
import numpy as np
import cv2
#events = [i for i in dir(cv2) if 'EVENT' in i]
#print(events)
def click_event(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
print(x,', ' ,y)
font = cv2.FONT_HERSHEY_SIMPLEX
strXY = str(x) + ', '+ str(y)
cv2.putText(img, strXY, (x, y), font, .5, (255, 255, 0), 2)
cv2.imshow('image', img)
if event == cv2.EVENT_RBUTTONDOWN:
blue = img[y, x, 0]
green = img[y, x, 1]
red = img[y, x, 2]
font = cv2.FONT_HERSHEY_SIMPLEX
strBGR = str(blue) + ', '+ str(green)+ ', '+ str(red)
cv2.putText(img, strBGR, (x, y), font, .5, (0, 255, 255), 2)
cv2.imshow('image', img)
#img = np.zeros((512, 512, 3), np.uint8)
img = cv2.imread('lena.jpg')
cv2.imshow('image', img)
cv2.setMouseCallback('image', click_event)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果
结果
程序函数讲解:
(1)鼠标回调函数
首先,我们创建一个鼠标回调函数,该函数在鼠标事件发生时执行。鼠标事件可以是与鼠标相关的任何内容,如左键向下,左键向上,左键双击等。它为我们提供了每个鼠标事件的坐标(x,y)。通过此活动和地点,我们可以做任何我们喜欢的事情。
(2)一个具有BGR颜色排序的3通道图像(imread返回的默认格式)
blue = img [y,x,0]
green = img [y,x,1]
red = img [y,x,2]
(3)numpy
NumPy是使用Python进行科学计算的基础包。
它包含其他内容:
一个强大的N维数组对象
复杂的(广播)功能
用于集成C / C ++和Fortran代码的工具
有用的线性代数,傅里叶变换和随机数功能
NumPy的主要对象是同构多维数组
NumPy的数组类称为ndarray
程序中出现的函数方法
返回给定形状和类型的新数组,用零填充。
numpy. zeros ( shape , dtype=float , order='C' )
参数:
shape :整数的int或元组 新阵列的形状,例如(2, 3)或2
dtype :数据类型,可选 数组的所需数据类型(默认为numpy.float64)
order :{'C','F'}可选 默认:'C' 是否在内存中以行主(C风格)或列主(Fortran风格)顺序存储多维数据
是否在内存中以行主(C风格)或列主(Fortran风格)顺序存储多维数据。
返回:
out : ndarray
具有给定形状,dtype和顺序的零的数组。
程序中实例:
np.zeros((512, 512, 3), np.uint8)
最后
以上就是可爱微笑为你收集整理的OpenCV笔记6: 使用OpenCV处理鼠标事件的全部内容,希望文章能够帮你解决OpenCV笔记6: 使用OpenCV处理鼠标事件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复