opencv进阶03-图像与鼠标的交互示例

这篇具有很好参考价值的文章主要介绍了opencv进阶03-图像与鼠标的交互示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在处理图像时,可能需要与当前正在处理的图像进行交互。OpenCV
提供了鼠标事件,使用户可以通过鼠标与图像交互。鼠标事件能够识别常用的鼠标操作,例如:针对不同按键的单击、双击,鼠标的滑动、拖曳等。

例如,用户单击鼠标,我们就画一个圆。通常的做法是,创建一个 OnMouseAction()响应函数,将要实现的操作写在该响应函数
内。响应函数是按照固定的格式创建的,其格式为:

def OnMouseAction(event,x,y,flags,param):

式中:

  • event 表示触发了何种事件,具体事件如表 19-3 所示。
  • x, y 代表触发鼠标事件时,鼠标在窗口中的坐标(x, y)。
  • flags 代表鼠标的拖曳事件,以及键盘鼠标联合事件,如表 19-4 所示。
  • param 为函数 ID,标识所响应的事件函数,相当于自定义一个 OnMouseAction()函数的ID。
  • OnMouseAction 为响应函数的名称,该名称可以自定义。

opencv进阶03-图像与鼠标的交互示例,opencv 进阶,opencv,计算机外设,交互,人工智能,计算机视觉,图像处理,python
opencv进阶03-图像与鼠标的交互示例,opencv 进阶,opencv,计算机外设,交互,人工智能,计算机视觉,图像处理,python
定义响应函数以后,要将该函数与一个特定的窗口建立联系(绑定),让该窗口内的鼠标触发事件时,能够找到该响应函数并执行。要将函数与窗 口绑定,可以通过 函 数cv2.setMouseCallback()实现,其基本语法格式是:

cv2.setMouseCallback(winname,onMouse)

式中:

  • winname 为绑定的窗口名。
  • onMouse 为绑定的响应函数名。

设计一个程序,对触发的鼠标事件进行判断。

import cv2
import numpy as np
def Demo(event,x,y,flags,param):
 if event == cv2.EVENT_LBUTTONDOWN:
  print("单击了鼠标左键")
 elif event==cv2.EVENT_RBUTTONDOWN :
  print("单击了鼠标右键")
 elif flags==cv2.EVENT_FLAG_LBUTTON:
  print("按住左键拖动了鼠标")
 elif event==cv2.EVENT_MBUTTONDOWN :
  print("单击了中间键")
# 创建名称为 Demo 的响应(回调)函数 OnMouseAction
# 将响应函数 Demo 与窗口“Demo19.9”建立连接(实现绑定)
img = np.ones((300,300,3),np.uint8)*255
cv2.namedWindow('jiaohu01')
cv2.setMouseCallback('jiaohu01',Demo)
cv2.imshow('jiaohu01',img)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果:
opencv进阶03-图像与鼠标的交互示例,opencv 进阶,opencv,计算机外设,交互,人工智能,计算机视觉,图像处理,python

说明:可以通过下面的方法查看 OpenCV 所支持的鼠标事件:

import cv2
events=[i for i in dir(cv2) if 'EVENT'in i]
print(events)

滚动条

滚动条(Trackbar)在 OpenCV 中是非常方便的交互工具,它依附于特定的窗口而存在。
通过调节滚动条能够设置、获取指定范围内的特定值。
在 OpenCV 中,函数 cv2.createTrackbar()用来定义滚动条,其语法格式为:

cv2.createTrackbar(trackbarname, winname, value, count, onChange)

式中:

  • trackbarname 为滚动条的名称。
  • winname 为滚动条所依附窗口的名称。
  • value 为初始值,该值决定滚动条中滑块的位置。
  • count 为滚动条的最大值。通常情况下,其最小值是 0。
  • onChange 为回调函数。一般情况下,将滚动条改变后要实现的操作写在回调函数内。

函数 cv2.createTrackbar()用于生成一个滚动条。拖动滚动条,就可以设置滚动条的值,并让滚动条返回对应的值。滚动条的值可以通过函数 cv2.getTrackbarPos()获取,其语法格式为:

retval=getTrackbarPos( trackbarname,winname )

式中:

  • retval 为返回值,获取函数 cv2.createTrackbar()生成的滚动条的值。
  • trackbarname 为滚动条的名称。
  • winname 为滚动条所依附的窗口的名称。

示例:用滚动条实现调色板

在 RGB 颜色空间中,任何颜色都是由红(R)、绿(G)、蓝(B)三种颜色构成的,每一种颜色分量的区间是[0, 255]。

本节用函数 cv2.createTrackbar()和函数 cv2.getTrackbarPos()设计
一个模拟调色板:在窗体中,有三个滚动条分别用来设置 R、G、B 的值,调色板会根据当前的 R、G、B 值实时显示其所对应的颜色。

import cv2
import numpy as np
def changeColor(x):
 r=cv2.getTrackbarPos('R','image')
 g=cv2.getTrackbarPos('G','image')
 b=cv2.getTrackbarPos('B','image')
 img[:]=[b,g,r]
img=np.zeros((100,700,3),np.uint8)
cv2.namedWindow('image')
cv2.createTrackbar('R','image',0,255,changeColor)
cv2.createTrackbar('G','image',0,255,changeColor)
cv2.createTrackbar('B','image',0,255,changeColor)
while(1):
 cv2.imshow('image',img)
 k=cv2.waitKey(1)&0xFF
 if k==27:
    break
cv2.destroyAllWindows()

opencv进阶03-图像与鼠标的交互示例,opencv 进阶,opencv,计算机外设,交互,人工智能,计算机视觉,图像处理,python

示例2:用滚动条控制阈值处理参数

import cv2
Type=0 # 阈值处理方式
Value=0 # 使用的阈值
def onType(a):
 Type= cv2.getTrackbarPos(tType, windowName)
 Value= cv2.getTrackbarPos(tValue, windowName)
 ret, dst = cv2.threshold(o, Value,255, Type)
 cv2.imshow(windowName,dst)
def onValue(a):
 Type= cv2.getTrackbarPos(tType, windowName)
 Value= cv2.getTrackbarPos(tValue, windowName)
 ret, dst = cv2.threshold(o, Value, 255, Type)
 cv2.imshow(windowName,dst)
o = cv2.imread("lena.png",0)
windowName = "demo.13" #窗体名
cv2.namedWindow(windowName)
cv2.imshow(windowName,o)
# 创建两个滚动条
tType = "Type" # 用来选取阈值处理方式的滚动条
tValue = "Value" # 用来选取阈值的滚动条
cv2.createTrackbar(tType, windowName, 0, 4, onType)
cv2.createTrackbar(tValue, windowName,0, 255, onValue)
if cv2.waitKey(0) == 27:
 cv2.destroyAllWindows()

运行程序,在窗体对象内,同时显示控制阈值和阈值处理方式的两个滚动条。调整滚动条可以分别控制阈值处理时所使用的阈值和阈值处理方式,运行结果如图

opencv进阶03-图像与鼠标的交互示例,opencv 进阶,opencv,计算机外设,交互,人工智能,计算机视觉,图像处理,python文章来源地址https://www.toymoban.com/news/detail-662336.html

到了这里,关于opencv进阶03-图像与鼠标的交互示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机视觉OpenCv学习系列:第四部分、键盘+鼠标响应操作

    键盘响应中有一个函数叫做 waitKey ,所有的获取键盘键值都是通过waitKey函数实现的。 1.键盘响应事件 cv.waitKey( [, delay] ) -- retval delay如果没有声明或者delay=0,表示一直阻塞 delay大于0,表示阻塞指定毫秒数 retval返回的对应键盘键值,注意:在不同的操作系统中可能会有差异! 典

    2024年02月09日
    浏览(49)
  • 从ChatGPT到ChatCAD:基于大型语言模型的医学图像交互式计算机辅助诊断

    1.   标题: ChatCAD: Interactive Computer-Aided Diagnosis on Medical Image using Large Language Models. 2.   期刊: arXiv 3. IF/JCR/分区: 无 4. DOI: arXiv:2302.07257 5. 作者: 沈定刚教授团队 2023年年初最火热的话题之一就是OpenAI的ChatGPT1,给人类带来了巨大的冲击。1月底,美国《财富》杂志2/3月合刊的

    2023年04月14日
    浏览(42)
  • 计算机图形图像技术(OpenCV核心功能、图像变换与图像平滑处理)

    1、显示图像 ①功能:在指定窗口中显示图像。 ②参数: name 为窗口的名字; image 为待显示的图像。 ③说明:可显示彩色或灰度的字节图像和浮点数图像,彩色图像数据按BGR顺序存储。 2、读入图像 ①功能:从指定文件读入图像。 ②参数: filename 为图像文件名,支持BMP、

    2024年02月03日
    浏览(50)
  • 【OpenCV】计算机视觉图像处理基础知识

    目录 前言 推荐 1、OpenCV礼帽操作和黑帽操作 2、Sobel算子理论基础及实际操作 3、Scharr算子简介及相关操作 4、Sobel算子和Scharr算子的比较 5、laplacian算子简介及相关操作 6、Canny边缘检测的原理 6.1 去噪 6.2 梯度运算 6.3 非极大值抑制 6.4 滞后阈值 7、Canny边缘检测的函数及使用

    2024年02月05日
    浏览(58)
  • 计算机毕业分享(含算法) opencv图像增强算法系统

    今天学长向大家分享一个毕业设计项目 毕业设计 opencv图像增强算法系统 项目运行效果: 毕业设计 基于机器视觉的图像增强 项目获取: https://gitee.com/sinonfin/algorithm-sharing 直方图均衡化是通过调整图像的灰阶分布,使得在0~255灰阶上的分布更加均衡,提高了图像的对比度,达

    2024年01月18日
    浏览(46)
  • 计算机视觉传统图像处理库opencv的使用

    人工智能领域的图像处理分支,整理了计算机视觉传统图像处理库opencv的使用网址链接。 opencv使用范围,主要用在计算机视觉、视频分析、机器学习、医学影像处理、自动驾驶、工业检测、游戏开发上。 1):opencv效果视频 opencv10个应用场景 - 知乎 2):opencv介绍 AI必备技能

    2024年02月09日
    浏览(46)
  • 深度学习图像风格迁移 - opencv python 计算机竞赛

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习图像风格迁移 - opencv python 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com/danche

    2024年02月04日
    浏览(58)
  • 计算机毕设 python opencv 机器视觉图像拼接算法

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月07日
    浏览(63)
  • 计算机竞赛 opencv python 深度学习垃圾图像分类系统

    🔥 优质竞赛项目系列,今天要分享的是 🚩 opencv python 深度学习垃圾分类系统 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 这是一个较为新颖的竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/p

    2024年02月13日
    浏览(80)
  • 计算机视觉基础【OpenCV轻松入门】:获取图像的ROI

    OpenCV的基础是处理图像,而图像的基础是矩阵。 因此,如何使用好矩阵是非常关键的。 下面我们通过一个具体的实例来展示如何通过Python和OpenCV对矩阵进行操作,从而更好地实现对图像的处理。 ROI(Region of Interest)是指图像或视频中被选取或感兴趣的特定区域。ROI可以用矩

    2024年02月22日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包