【跟官网学opencv-python】笔记1.3:opencv鼠标绘图 cv2.setMouseCallback()

这篇具有很好参考价值的文章主要介绍了【跟官网学opencv-python】笔记1.3:opencv鼠标绘图 cv2.setMouseCallback()。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

目标

函数详解

1、cv2.setMouseCallback()鼠标回调函数

2、鼠标事件简介

代码演示

​编辑

应用演示

运行效果

参考


前言

跟着官网学习才是基础入门的最佳选择,下文是opencv-python官网的学习记录及扩展!

目标

学习函数cv2.setMouseCallback()并使用鼠标绘制不同图形(矩形、多边形等)。

函数详解

1、cv2.setMouseCallback()鼠标回调函数

cv2.setMouseCallback(windowName, onMouse, param=None)
windowName  窗体名称
onMouse  鼠标事件的回调函数
param    传递给回调函数的可选参数

2、鼠标事件简介

查看所有被支持的鼠标事件
import cv2
events = [i for i in dir(cv2) if 'EVENT' in i]
print (events)

鼠标事件标志 MouseEventFlags

'EVENT_FLAG_ALTKEY'     表示按下 ALT 键.
'EVENT_FLAG_CTRLKEY'    表示按下 CTRL 键.
'EVENT_FLAG_SHIFTKEY'   表示按下 SHIFT 键.
'EVENT_FLAG_LBUTTON'    表示鼠标左键已按下.
'EVENT_FLAG_MBUTTON'    表示鼠标中键已按下.
'EVENT_FLAG_RBUTTON'    表示鼠标右键已按下.

鼠标事件类型 MouseEventTypes

'EVENT_LBUTTONDBLCLK'   表示双击鼠标左键.
'EVENT_LBUTTONDOWN' 表示按下鼠标左键.
'EVENT_LBUTTONUP'   表示释放鼠标左键.

'EVENT_MBUTTONDBLCLK'   表示双击鼠标中键.
'EVENT_MBUTTONDOWN' 表示按下鼠标中键.
'EVENT_MBUTTONUP'   表示释放鼠标中键.

'EVENT_MOUSEHWHEEL' 正值和负值分别表示向右和向左滚动.
'EVENT_MOUSEMOVE'   指示鼠标指针已移到窗口上.
'EVENT_MOUSEWHEEL'  正值和负值分别表示向前和向后滚动.

'EVENT_RBUTTONDBLCLK'   表示双击鼠标右键.
'EVENT_RBUTTONDOWN' 表示按下鼠标右键.
'EVENT_RBUTTONUP'   表示释放鼠标右键.

代码演示

在图片上双击过的位置绘制一个圆,创建鼠标事件回调函数,当鼠标事件发生时就会被执行,
比如左键按下,松开,左键双击等。
可以通过鼠标事件获得相对应的图片上的坐标,根据这些信息可以做想做的事。
所有鼠标事件回调函数都有一个统一的格式,不同的地方是被调用后的功能。

import numpy as np
import cv2 as cv
# mouse callback function
def draw_circle(event,x,y,flags,param):
    if event == cv.EVENT_LBUTTONDBLCLK:
        cv.circle(img,(x,y),100,(255,0,0),-1)
# Create a black image, a window and bind the function to window
img = np.zeros((512,512,3), np.uint8)
cv.namedWindow('image')
cv.setMouseCallback('image',draw_circle)
while(1):
    cv.imshow('image',img)
    if cv.waitKey(20) & 0xFF == 27:
        break
cv.destroyAllWindows()

cv2.setmousecallback,OpenCV-Python,opencv,python,计算机视觉

 

应用演示

通过键盘按键‘m'切换绘图类型曲线或矩形,并使用鼠标绘制。

import cv2
import numpy as np

# 当鼠标按下时为True
drawing = False
# 如果mode为true时绘制矩形,按下'm'变成绘制曲线
mode = True
ix, iy = -1, -1


# 创建回调函数
def draw_circle(event, x, y, flags, param):
    global ix, iy, drawing, mode
    # 当按下左键时返回起始位置坐标
    if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        ix, iy = x, y
    # 当左键按下并移动时绘制图形,event可以查看移动,flag查看是否按下
    elif event == cv2.EVENT_MOUSEMOVE and flags == cv2.EVENT_FLAG_LBUTTON:
        if drawing == True:
            if mode == True:
                cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), -1)

            else:
                # 绘制圆圈,小圆点连在一起就成了线,3代表笔画的粗细
                cv2.circle(img, (x, y), 3, (0, 0, 255), -1)

    # 当鼠标松开时停止绘图
    elif event == cv2.EVENT_LBUTTONUP:
        drawing == False
        print(ix, iy, x, y)

'''
下面把回调函数与OpenCV窗口绑定在一起,在主循环中奖'm'键与模式转换绑定在一起
'''
img = cv2.imread('../Resources/lena.png')#np.zeros((512, 512, 3), np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_circle)
while (1):
    cv2.imshow('image', img)
    k = cv2.waitKey(1)
    if k == ord('m'):
        mode = not mode
    elif k == ord('q') or k == 27:
        break
cv2.destroyAllWindows()

运行效果

下图为代码运行效果,通过鼠标在图像上绘制矩形和曲线

cv2.setmousecallback,OpenCV-Python,opencv,python,计算机视觉

 

参考

OpenCV: OpenCV-Python Tutorials

学习、进步、坚持。。。内容不间断更新中。。。文章来源地址https://www.toymoban.com/news/detail-775122.html

到了这里,关于【跟官网学opencv-python】笔记1.3:opencv鼠标绘图 cv2.setMouseCallback()的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 解决opencv-python 安装报错 Could not build wheels for opencv-python

    但是发现更新完了之后还是没用,因为主要原因是如果直接安装opencv默认安装最新版,此时找一个python3.6支持的版本就行了,如4.3.0.38,使用如下命令即可成功安装

    2024年02月16日
    浏览(48)
  • Python:安装opencv-python出错问题ERROR: Could not build wheels for opencv-python

    笔者在安装opencv-python的过程中遇到了如下错误 在安装opencv-python的过程,笔者直接通过pip命令进行安装,遇到了如下问题 命令 问题 直接使用上述命令安装的是最新版本,挑一个别的版本的opencv-python即可解决上述问题 使用命令如下 问题解决

    2024年02月11日
    浏览(45)
  • 安装opencv-python

    1.由于之前pip install --upgrade pip出错了,导致Anaconda中Scripts中pip.exe出错 解决方式:python -m ensurepip --default-pip,获得可行的pip.exe 可行的升级pip的方式:python -m pip install --upgrade pip 2.安装opencv-python 尝试从官网安装,官网提示需要更新pip 但是更新出错了,于是有了1问题,pip.exe不

    2024年02月06日
    浏览(39)
  • opencv-python安装

    OpenCV就是学习计算机视觉的过程中经常用到的工具,opencv降低了计算机视觉的学习门槛。随着机器学习、深度学习等技术的发展,Python庞大的扩展库为Python用户在编程过程中提供了极大的便利,opencv-python便是其中一员。在实际使用opencv-python扩展库的过程中,更多的读者关心

    2024年02月04日
    浏览(68)
  • opencv-python 降噪

    定义 图像噪声是指存在于图像数据中的 不必要的或多余的干扰信息 。噪声的存在严重影响了图像的质量,因此在图像增强处理和分类处理之前,必须予以纠正。 图像中各种妨碍人们对其信息接受的因素即可称为图像噪声 。噪声在理论上可以定义为“不可预测,只能用概率

    2024年02月03日
    浏览(31)
  • opencv-python版本问题

    opencv库有两种,一种是 opencv-python ,另一种是 opencv-contrib-python 。前者是基础库,后者则是在前者基础上加了一些contrib module(视觉处理一般用这个)。 安装好OpenCV库,想着先在OpenCV的瀚海里扎两个猛子。没成想,一头扎下去便撞到石头上。 如下图,在键入cv2.imread()时,不仅

    2024年02月13日
    浏览(33)
  • OpenCV-Python(21):OPenCV查找及绘制轮廓

    1.1 目标 理解什么是轮廓 学习掌握找轮廓、绘制轮廓等 学习使用cv2.findContours()、cv2.drawContours()函数的用法 1.2 什么是轮廓         在OpenCV中,轮廓是 图像中连续的边界线的曲线,具有相同的颜色或者灰度,用于表示物体的形状 。轮廓在图像处理和计算机视觉中非常重要

    2024年01月18日
    浏览(32)
  • openCV-python模板匹配(旋转)

    本文将介绍使用OpenCV实现多角度模板匹配的详细步骤 + 代码。 熟悉OpenCV的朋友肯定都知道OpenCV自带的模板匹配matchTemplate方法是不支持旋转的,也就是说当目标和模板有角度差异时匹配常常会失败,可能目标只是轻微的旋转,匹配分数就会下降很多,导致匹配精度下降甚至匹

    2024年02月01日
    浏览(51)
  • pip安装opencv-python

    OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。该程序库也可以使用英特尔公司的I

    2023年04月22日
    浏览(28)
  • OpenCv-Python图像特征识别

    本练习学习了OpenCv-Python关于图像特征识别的一些算法,算法理解起来较为困难,但函数用起来上手比较快,主要要明白函数的输入输出的含义。 虽然算法理解不容易,但程序还算有趣,输入是一个完整的图片和一组图片碎片,如下图,然后经过算法计算,把碎片匹配到正确

    2024年02月07日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包