我是靠谱客的博主 可爱微笑,最近开发中收集的这篇文章主要介绍OpenCV笔记6: 使用OpenCV处理鼠标事件,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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处理鼠标事件所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部