OpenCV 鼠标绘图

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

1、实验目标

(1)、鼠标当笔
(2)、函数:setMouseCallback()
(3)、滑动调色板
(4)、函数cv.createTrackbar(),cv.getTrackbarPos()

2、实验步骤

(1)、安装必要的库

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

(2)、查看支持鼠标的操作

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

OpenCV 鼠标绘图
(3)、双击鼠标画出一个圆
cv2.setMouseCallback(winname, onMouse, userdata=0)
winname: 自定义的窗口名
onMouse:鼠标事件的回调函数(在发生鼠标事件时执行)
userdata:传递给回调函数的可选参数

#双击鼠标画一个圆
import numpy as np
import cv2 as cv
def draw_circle(event,x,y,flags,param):
    if event==cv.EVENT_LBUTTONDBLCLK:
        cv.circle(img,(x,y),100,(255,0,0),-1)
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()

OpenCV 鼠标绘图
(4)、拖动鼠标绘制矩形或圆圈
回调函数包含两部分,一部分画矩形,一部分画曲线

drawing = False #默认False,按下鼠标为True
mode = True #if True,画出矩形,按'm'切换曲线
ix,iy=-1,-1
#响应鼠标函数
def draw_circle(event,x,y,flags,param):
    global ix,iy,drawing,mode
    if event == cv.EVENT_LBUTTONDOWN:#左键击下
        drawing = True
        ix,iy=x,y
        
    elif event==cv.EVENT_MOUSEMOVE:#鼠标移动
        if drawing == True:
            if mode==True:
                cv.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
            else:
                cv.circle(img,(x,y),5,(0,0,255),-1)
    elif event==cv.EVENT_LBUTTONUP:#左键弹起
        drawing = False
        if mode == True:
            cv.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
        else:
            cv.circle(img,(x,y),5,(0,0,255),-1)
#将函数与窗口进行绑定
img = np.zeros((512,512,3),np.uint8)
cv.namedWindow('image')
cv.setMouseCallback('image',draw_circle)
while(1):
    cv.imshow('image',img)
    k = cv.waitKey(1) & 0xFF
    #按下'm'键切换模式
    if k==ord('m'):#获得按键编码
        mode = not mode
    elif k==27:#按下ESC键退出
        break
cv.destroyAllWindows()

OpenCV 鼠标绘图
OpenCV 鼠标绘图
(5)滑动条调色板
cv.getTrackbarPos(trackbarname, winname)
第一个参数是滑动条名字,
第二个时所在窗口,
返回值是滑动条的数值。

cv.createTrackbar(“scale”, “display”, 0, 100, self.opencv_calibration_node.on_scale)
第一个参数时滑动条的名字,
第二个参数是滑动条被放置的窗口的名字,
第三个参数是滑动条默认值,
第四个参数时滑动条的最大值,
第五个参数时回调函数,每次滑动都会调用回调函数。

def nothing(x):
    pass
img = np.zeros((300,512,3),np.uint8)#创建黑色图片
cv.namedWindow('image')#创建窗口

#创建滑动条
cv.createTrackbar('R','image',0,255,draw_circle)
cv.createTrackbar('G','image',0,255,draw_circle)
cv.createTrackbar('B','image',0,255,draw_circle)

#创建开关
switch = '0 : OFF \n1 : ON'
cv.createTrackbar(switch,'image',0,1,nothing)

while(1):
    cv.imshow('image',img)
    k = cv.waitKey(1) & 0xFF
    if k==27:
        break
    r = cv.getTrackbarPos('R','image')
    g = cv.getTrackbarPos('G','image')
    b = cv.getTrackbarPos('B','image')
    s = cv.getTrackbarPos(switch,'image')
#     print(r,g,b,s)
    if s==0:
        img[:] = 0
    else:
        img[:] = [b,g,r]

cv.destroyAllWindows()

OpenCV 鼠标绘图
OpenCV 鼠标绘图
(6)、鼠标绘图,使用调色板调节颜色

img = np.zeros((300,512,3),np.uint8)#创建黑色图片
cv.namedWindow('image')#创建窗口

#创建滑动条
r = cv.createTrackbar('R','image',0,255,nothing)
g = cv.createTrackbar('G','image',0,255,nothing)
b = cv.createTrackbar('B','image',0,255,nothing)
drawing = False #默认False,按下鼠标为True
ix,iy=-1,-1
#响应鼠标函数
def nothing(x):
    pass
def draw(event,x,y,flags,param):
    global ix,iy,drawing
    r = cv.getTrackbarPos('R','image')
    g = cv.getTrackbarPos('G','image')
    b = cv.getTrackbarPos('B','image')
    if event == cv.EVENT_LBUTTONDOWN:#左键击下
        drawing = True
        ix,iy=x,y
    elif event==cv.EVENT_MOUSEMOVE:#鼠标移动
        if drawing == True:
            cv.circle(img,(x,y),5,(b,g,r),-1)
    elif event==cv.EVENT_LBUTTONUP:#左键弹起
        drawing = False
        
        cv.circle(img,(x,y),5,(b,g,r),-1)

cv.setMouseCallback('image',draw)
while(1):
    cv.imshow('image',img)
    k = cv.waitKey(1) & 0xFF
    if k==27:
        break
cv.destroyAllWindows()

OpenCV 鼠标绘图文章来源地址https://www.toymoban.com/news/detail-492649.html

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

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

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

相关文章

  • 【跟官网学opencv-python】笔记1.2:opencv基本绘图函数

    目录 前言 目标 函数详解 1、cv2.line()画线 2、cv2.rectangle()画矩形 3、cv2.circle()画圆 4、cv2.ellipse()画椭圆 5、cv2.polylines()画多边形 6、cv2.putText()绘制文本 代码演示 运行效果 参考 跟着官网学习才是基础入门的最佳选择,下文是opencv-python官网的学习记录及扩展! 掌握基本绘图函数

    2024年02月07日
    浏览(33)
  • 【opencv学习】鼠标回调函数、鼠标控制画矩形

    1.回调函数可以简单理解为一边做一件事的同时做另一件事,优化之前的实现完一个函数后才实现另一个的问题。 鼠标回调函数就是一边鼠标操作画图,一边显示画出的图像。 2.实现一个矩形rec只需要知道一个左上角的坐标和宽高即可实例化对象。

    2024年02月14日
    浏览(32)
  • opencv鼠标事件函数setMouseCallback()详解

    opencv鼠标事件函数setMouseCallback()详解 1、鼠标事件函数: (1)鼠标事件函数原型:setMouseCallback(),此函数会在调用之后不断查询回调函数onMouse(),直到窗口销毁 (2)回调函数onMouse(),可随意命名,但是要与 setMouseCallback()函数里的回调函数名称一致 2、代码示例: 利用鼠标事

    2024年02月10日
    浏览(24)
  • OPENCV C++(三)二值化灰度函数+调用摄像头+鼠标响应+肤色检测

    图像 目标图像 rgb转灰度 灰度图,目标图,阈值,大于阈值的转换的像素值,方法为大津法 灰度图,目标图,大于阈值的转换的像素值,自适应方法,二值化方法 虽然人物的信息丢失了很多,但是背景基本上被去掉了。丢失的人物的信息可以通过位运算等恢复。在去除背景

    2024年02月14日
    浏览(29)
  • OPENCV 闭运算实验示例代码morphologyEx()函数

     闭运算就是先膨胀,后腐蚀,膨胀或者腐蚀的对象都是针对非零像素,也就是图片当中不是全黑的那部分像素-----或者说灰度值等于0的那些个像素。膨胀导致非零像素膨胀,黑像素就会缩小, 腐蚀导致非零像素减少,黑色像素就会增多。也许有人会搞不清这一点 闭运算是先

    2024年02月07日
    浏览(35)
  • C# chart绘图 鼠标响应

    chart1.ChartAreas[0]. AxisX.Maximum 横坐标显示区域最大值 chart1.ChartAreas[0]. AxisX.Minimum 横坐标显示区域最小值 显示宽度 = chart1.ChartAreas[0].AxisX.Maximum - chart1.ChartAreas[0].AxisX.Minimum chart1.ChartAreas[0]. AxisX.ScaleView.Position    X轴相对于起始点被移动的距离 chart1.ChartAreas[0]. AxisY.ScaleView.Positi

    2024年02月09日
    浏览(23)
  • 从零开始学习调用百度地图网页API:三、鼠标点击绘图功能

    注:需要将 你的ak 替换,ak从百度地图官网注册申请,选择浏览器类型api。 绘制线段 显示对象的位置信息 显示任意点坐标 最初的实现方法,在 显示坐标 按钮多次被点击后,会导致再点击 不显示 按钮,无法remove事件。依然会在地图上点击后出现坐标信息。 这是因为addEve

    2024年02月07日
    浏览(28)
  • Python+turtle交互式绘图:可以用鼠标拖动的小海龟

    功能描述:代码运行后,在窗口上显示3个小海龟,使用鼠标拖动小海龟时可以动态改变窗口颜色,如下图所示。 说明:本例代码主体部分来自turtle Demo,我稍微修改了一下,重点增加了注释,方便阅读和理解。 参考代码: ----------相关阅读---------- 教学课件 1900页Python系列P

    2023年04月08日
    浏览(39)
  • MFC下CPictureCtrl控件基于鼠标左键坐标的直线绘图

    本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系本人将于及时删除 目录 1.创建自定义类CMyPictureCtrl 2.布局Dlg 3.实验代码 4.运行结果 在基于对话框的MFC应用程序中,通过鼠标操作获取坐标并在CPictureCtrl控件中使用LineTo()函数画直线,涉及以下几个关键步骤:

    2024年04月25日
    浏览(22)
  • 实验绘图绘制有效图形

    科研作图 草稿,辅助实验:说明目的即可,甚至直接在纸上作出草图。简单的分 析利用Excel、VectorNTI和画图板即可。 简便易学,但较为粗糙,难登大雅之堂。 演示,用在PowerPoint或海报中。要求制作精细,色彩鲜明。3.发表文章 发表文章,需要输出为EPS和TIF格式的图片。由于

    2024年01月22日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包