计算机视觉处理----OpenCV(鼠标控制和滑动条事件TrackBar)
在OpenCV中,setMouseCallback和TrackBar是用于实现交互式图像处理的重要工具。setMouseCallback允许用户通过设置回调函数来捕捉和处理鼠标事件,如点击、移动等,从而在图像窗口中进行交互操作。回调函数可以获取鼠标事件的详细信息,如事件类型、坐标和按键状态。TrackBar则是一个滑动条控件,用于动态调整图像处理参数,如亮度、对比度等。通过createTrackb
·
一、鼠标控制
在OpenCV中,setMouseCallback 是一个用于设置鼠标事件回调函数的接口。当你希望在 显示的图像窗口中捕捉用户的鼠标操作(如点击、移动、按下或释放)时,这个接口非常有 用。它允许你通过一个回调函数来处理用户的鼠标事件,从而进行交互式图像处理。
1.1、控制鼠标
setMouseCallback 用于在指定的窗口上设置一个鼠标事件的回调函数。当用户在这个窗口 内进行鼠标操作时,回调函数会被触发,并且可以获取关于鼠标事件的详细信息。
cv2.setMouseCallback(windowName, mouse_cb, param=None)
参数 | 说明 |
---|---|
winname | 指定事件触发的窗口名称,必须是通过 cv2.namedWindow 创建的窗口。 |
mouse_cb (function) | 回调函数,当鼠标事件发生时,该函数会被调用。 |
param | 可以传递附加的参数,它会作为 userdata 传递给回调函数。 |
事件类型 | 说明 | 数值 |
---|---|---|
cv2.EVENT_LBUTTONDOWN | 左键按下 | 1 |
cv2.EVENT_LBUTTONUP | 左键释放 | 4 |
cv2.EVENT_RBUTTONDOWN | 右键按下 | 2 |
cv2.EVENT_RBUTTONUP | 右键释放 | 5 |
cv2.EVENT_MBUTTONDOWN | 中键按下 | 16 |
cv2.EVENT_MBUTTONUP | 中键释放 | 17 |
cv2.EVENT_MOUSEMOVE | 鼠标移动 | 0 |
cv2.EVENT_MOUSEWHEEL | 鼠标滚轮 | 8 |
cv2.EVENT_FLAG_LBUTTON | 左键按下的标志位 | 32 |
cv2.EVENT_FLAG_RBUTTON | 右键按下的标志位 | 64 |
cv2.EVENT_FLAG_MBUTTON | 中键按下的标志位 | 128 |
cv2.EVENT_FLAG_CTRLKEY | 按下 Ctrl 键的标志位 | 8 |
cv2.EVENT_FLAG_SHIFTKEY | 按下 Shift 键的标志位 | 16 |
cv2.EVENT_FLAG_ALTKEY | 按下 Alt 键的标志位 | 32 |
回调函数
def mouse_cb(event, x, y, flags, userdata):
print(event, x, y, flags, userdata)
参数 | 说明 |
---|---|
event | 鼠标事件类型(例如鼠标按下、移动等)。 |
x, y | 鼠标事件发生时的坐标(相对于窗口左上角)。 |
flags | 标志,用于指示鼠标的额外状态(如按键是否按下)。 |
userdata | 附加参数,可以是任何类型的数据,通常用于传递额外信息。 |
import cv2
import numpy as np
# 创建一个空白图像
img = cv2.imread("./images/pands.png",cv2.IMREAD_COLOR )
# 鼠标回调函数
def draw_circle(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
print(event, x, y, flags, param)
# 创建一个窗口
cv2.namedWindow("image")
# 设置回调函数
cv2.setMouseCallback("image", draw_circle)
while True:
cv2.imshow("image", img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
import time
import cv2
import numpy as np
# 创建一个空白图像
img = cv2.imread("./images/pands.png",cv2.IMREAD_COLOR )
# 鼠标回调函数
mouse_key={
1: "左键按下 (cv2.EVENT_LBUTTONDOWN)",
4: "左键释放 (cv2.EVENT_LBUTTONUP)",
2: "右键按下 (cv2.EVENT_RBUTTONDOWN)",
5: "右键释放 (cv2.EVENT_RBUTTONUP)",
16: "中键按下 (cv2.EVENT_MBUTTONDOWN)",
17: "中键释放 (cv2.EVENT_MBUTTONUP)",
0: "鼠标移动 (cv2.EVENT_MOUSEMOVE)",
8: "鼠标滚轮 (cv2.EVENT_MOUSEWHEEL)",
32: "左键按下的标志位 (cv2.EVENT_FLAG_LBUTTON)",
64: "右键按下的标志位 (cv2.EVENT_FLAG_RBUTTON)",
128: "中键按下的标志位 (cv2.EVENT_FLAG_MBUTTON)",
8: "按下 Ctrl 键的标志位 (cv2.EVENT_FLAG_CTRLKEY)",
16: "按下 Shift 键的标志位 (cv2.EVENT_FLAG_SHIFTKEY)",
32: "按下 Alt 键的标志位 (cv2.EVENT_FLAG_ALTKEY)"
}
def draw_circle(event, x, y, flags, param):
if event!=0:
print(mouse_key[event], x, y, flags)
cv2.namedWindow('image')
cv2.setMouseCallback("image", draw_circle)
cv2.imshow('image',img)
cv2.waitKey(0)
二、滑动条事件TrackBar
在 OpenCV 中,TrackBar 是一个滑动条控件,用来动态调整参数值,通常用于图像处理中 的实时调整,比如调整图像的亮度、对比度、阈值等。它允许用户通过拖动滑块来改变一些 参数,并实时观察效果,十分适合交互式图像处理应用。
2.1、cv2.createTrackbar()
该函数用于在指定窗口中创建一个滑动条(TrackBar),可以用来调整某个值
cv2.createTrackbar(trackbar_name, window_name, value, count, onChange)
参数 | 说明 |
---|---|
trackbar_name | 滑动条的名称。 |
window_name | 滑动条所在窗口的名称,通常是通过cv2.namedWindow() 创建的窗口。 |
value | 滑动条的初始值。 |
count | 滑动条的最大值(通常是255,用于RGB颜色通道) |
onChange | 回调函数,每次滑动条值发生变化时调用。通常设置为空函数( nothing ),如果需要某些功能,可以在回调函数 内处理。 |
2.2、cv2.getTrackbarPos()
该函数用于获取滑动条(TrackBar)当前的值。通过这个函数,可以获取滑动条的值并应 用到程序中的其他部分(例如更新图像的颜色)。
cv2.getTrackbarPos(trackbar_name, window_name)
参数 | 说明 |
---|---|
trackbar_name | 滑动条的名称,必须与创建时一致。 |
window_name | 滑动条所在窗口的名称,必须与创建时一致 |
import cv2
import numpy as np
# 创建一个窗口用于显示图像
cv2.namedWindow("image",cv2.WINDOW_AUTOSIZE)
cv2.moveWindow("image", 500, 300)
# 创建一个300*512 大小的黑色图像, RGB3个通道
img = np.zeros((300,600,3),dtype=np.uint8)
# 创建一个回调函数
def nothing(x):
pass
# 创建一个滑动条
# 第一个参数性:滑动条名称
# 第二个参数:滑动条要绑定的窗口名称
# 第三个参数:滑动条初始值
# 第四个参数:滑动条最大值
# 第五个参数:滑动条回调函数
cv2.createTrackbar("R","image",0,255,nothing) # 红色通道
cv2.createTrackbar("G","image",0,255,nothing) # 绿色通道
cv2.createTrackbar("B","image",0,255,nothing) # 蓝色通道
while True:
# 显示当前的图像窗口
cv2.imshow("image",img)
# 等待按键事件
key = cv2.waitKey(1)
if key == ord('q'):
break
# 获取滑动条的值
# 第一个参数:滑动条名称
# 第二个参数:滑动条要绑定的窗口名称
r = cv2.getTrackbarPos("R","image") # 获取红色通道
g = cv2.getTrackbarPos("G","image") # 获取绿色通道
b = cv2.getTrackbarPos("B","image") # 获取蓝色通道
# 获取滑动条的值 注意颜色顺序 BGR
img[:] = [b,g,r]
# 关闭所有窗口
cv2.destroyAllWindows()
更多推荐
所有评论(0)