py-opencv学习笔记四 鼠标事件和画图、滑动条边缘检测观察

1、鼠标事件和画图

opencv的鼠标点击这些都是使用的事件机制。也就是说,当鼠标发生动作时,如移动单击、双击都会产生对应的事件。我们只需要用定义事件的回调函数,并用setMouseCallback将函数与opencv绑定,即可以实现相应的操作。

此次,我编写了个简单的画圆功能,鼠标左键按下(确定圆心),拖动(确定半径),松开左键圆画出来。

import cv2 as cv
import numpy as np
import math as M
'''查看opencv的事件'''
events =[i for i in dir(cv) if 'EVENT' in i]
for i in events:
    print(i)

'''绘画标志'''
drawing=False
radicus=0.0
#圆心坐标初始化
ix,iy=-1,-1
#鼠标回调函数
def drawCircle(event,x,y,flage,param):
        #global 声明全局变量
        global ix,iy,drawing,radicus
        if event==cv.EVENT_LBUTTONDOWN:
            #鼠标按下,圆心确定,开始画圆
            drawing=True
            ix,iy=x,y
        elif event==cv.EVENT_MOUSEMOVE:
            #确定半径
            radicus=M.sqrt((ix-x)*(ix-x)+(iy-y)*(iy-y))
        elif event==cv.EVENT_LBUTTONUP:
            if drawing:
                #开始画圆
                drawing=False
                cv.circle(img,(ix,iy),int(radicus),(255,0,0))
#生成一个黑百图像512*512
img=np.zeros((512,512,1),np.uint8)
cv.namedWindow("hello")
#加载处理函数
cv.setMouseCallback("hello",drawCircle)
while (1):
    cv.imshow("hello",img)
    if cv.waitKey(20)==ord('C'):
        break
cv.destroyWindow("hello")

效果:

 

2、生成滑动条,来观察图像调节效果

本次使用的函数有:cv2.getTrackbarPos(),cv2.creatTrackbar() ,第一个用来获取滑动条的位置值,第二个则是创建一个滑动条。我用了个while 循环来不断的获取滑动条的位置,然后不断的跟新和显示图像

import cv2 as cv
'''
cv2.getTrackbarPos() 函数的一个参数是滑动条的名字,第二个参数 是滑动条被放置窗口的名字,第三个参数是滑动条的默认位置。
第四个参数是 滑动条的最大值,第五个函数是回调函数,每次滑动条的滑动都会调用回调函 数。回调函数通常都会含有一个默认参数,就是滑动条的位置。
在本例中这个 函数不用做任何事情,我们只需要 pass 就可以了。
'''
def nothing(x):
        pass
        
val=20
src=cv.imread("hua.jpg")
#深拷贝
img=src.copy()
cv.namedWindow("TrackBar",cv.WINDOW_AUTOSIZE)
cv.namedWindow("originle")
cv.imshow("originle",src)
cv.createTrackbar("Threshold","TrackBar",val,255,nothing)
while(1):
    val=cv.getTrackbarPos("Threshold","TrackBar")
    img=cv.Canny(src,val,255)
    cv.imshow("TrackBar",img)
    if cv.waitKey(5)==ord("C"):
       break
    

 

效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值