【OpenCV】控制鼠标、TrackBar控件

  • 学习用 OpenCV 处理鼠标事件

  • 你将学习这些函数:**cv.setMouseCallback()**

  • 学习将轨迹栏绑定到 OpenCV 窗口

  • 你将学习这些函数:**cv.getTrackbarPos(), **cv.createTrackbar() 等等。

1. 控制鼠标

步骤

定义一个鼠标回调函数(mouse_callback)——创建窗口——设置回调函数(setMouseCallback)——显示窗口和背景——退出窗口

代码

#!/user/bin/env python3
# -*- coding: utf-8 -*-
import cv2
import numpy
import numpy as np

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

# 定义鼠标回调函数
def mouse_callback(event,x,y,flags,underdata):
    # if event == cv2.EVENT_LBUTTONDBLCLK:
        # cv2.circle(img, (x, y), 100, (255, 0, 0), -1)
    print(event,x,y,flags,underdata)


# 创建窗口
cv2.namedWindow('mouse',cv2.WINDOW_NORMAL)
cv2.resizeWindow('mouse',640,360)

# 设置回调函数
cv2.setMouseCallback('mouse',mouse_callback,'123')

#显示窗口和背景
img = np.zeros((360,640,3),np.uint8)
while True:
    cv2.imshow('mouse',img)
    key = cv2.waitKey(1)
    if key & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()

2. TrackBar控件

 cv.createTrackbar() 函数,第一个参数是轨迹栏名字,第二个参数是被附上的窗口名字,第三个参数是默认值,第四个是最大值,第五个是回调函数——滑条改变所执行的函数。这个回调函数也有一个默认参数,表示轨迹栏位置。

轨迹栏的另一个重要应用是用作按钮或者开关。OpenCV在默认情况下没有按钮功能,因此我们用轨迹栏实现这样的功能。在我们的程序中创建了一个开关,其中程序只会在开关打开时有效,否则屏幕始终是黑色。

#!/user/bin/env python3
# -*- coding: utf-8 -*-
import numpy as np
import cv2 as cv
def nothing(x):
    pass
# 创建一个黑色图像,一个窗口
img = np.zeros((300,512,3), np.uint8)
cv.namedWindow('image')
# 创建一个改变颜色的轨迹栏
cv.createTrackbar('R','image',0,255,nothing)
cv.createTrackbar('G','image',0,255,nothing)
cv.createTrackbar('B','image',0,255,nothing)
# 创建一个用来启用和关闭功能的开关
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:  # ESC键
        break
    # get current positions of four trackbars
    r = cv.getTrackbarPos('R','image')
    g = cv.getTrackbarPos('G','image')
    b = cv.getTrackbarPos('B','image')
    s = cv.getTrackbarPos(switch,'image')
    if s == 0:
        img[:] = 0
    else:
        img[:] = [b,g,r]
cv.destroyAllWindows()
#!/user/bin/env python3
# -*- coding: utf-8 -*-
import cv2
import numpy as np

def callback():
     pass

# 创建窗口
cv2.namedWindow('trackbar',cv2.WINDOW_NORMAL)

# 创建trackbar
cv2.createTrackbar('R','trackbar',0,255,callback)
cv2.createTrackbar('G','trackbar',0,255,callback)
cv2.createTrackbar('B','trackbar',0,255,callback)
# 创建一个背景图片
img = np.zeros((480,460,3),np.uint8)

while True:
    # 获取当前trackbar的值
    r = cv2.getTrackbarPos('R','trackbar')
    g = cv2.getTrackbarPos('G', 'trackbar')
    b = cv2.getTrackbarPos('B', 'trackbar')

    #改变背景颜色
    img[:] = [b, g, r]
    cv2.imshow('trackbar', img)

    key = cv2.waitKey(10)
    if key & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()

你可能感兴趣的:(OpenCV图像处理,opencv,计算机视觉)