建设部网站核对编号,建程网会员共享,什么叫友情链接,建设网站合同在处理图像时#xff0c;可能需要与当前正在处理的图像进行交互。OpenCV 提供了鼠标事件#xff0c;使用户可以通过鼠标与图像交互。鼠标事件能够识别常用的鼠标操作#xff0c;例如#xff1a;针对不同按键的单击、双击#xff0c;鼠标的滑动、拖曳等。 例如#xff0c;… 在处理图像时可能需要与当前正在处理的图像进行交互。OpenCV 提供了鼠标事件使用户可以通过鼠标与图像交互。鼠标事件能够识别常用的鼠标操作例如针对不同按键的单击、双击鼠标的滑动、拖曳等。 例如用户单击鼠标我们就画一个圆。通常的做法是创建一个 OnMouseAction()响应函数将要实现的操作写在该响应函数 内。响应函数是按照固定的格式创建的其格式为 def OnMouseAction(event,x,y,flags,param): 式中
event 表示触发了何种事件具体事件如表 19-3 所示。x, y 代表触发鼠标事件时鼠标在窗口中的坐标(x, y)。flags 代表鼠标的拖曳事件以及键盘鼠标联合事件如表 19-4 所示。param 为函数 ID标识所响应的事件函数相当于自定义一个 OnMouseAction()函数的ID。OnMouseAction 为响应函数的名称该名称可以自定义。 定义响应函数以后要将该函数与一个特定的窗口建立联系绑定让该窗口内的鼠标触发事件时能够找到该响应函数并执行。要将函数与窗 口绑定可以通过 函 数cv2.setMouseCallback()实现其基本语法格式是 cv2.setMouseCallback(winname,onMouse) 式中
winname 为绑定的窗口名。onMouse 为绑定的响应函数名。
设计一个程序对触发的鼠标事件进行判断。
import cv2
import numpy as np
def Demo(event,x,y,flags,param):if event cv2.EVENT_LBUTTONDOWN:print(单击了鼠标左键)elif eventcv2.EVENT_RBUTTONDOWN :print(单击了鼠标右键)elif flagscv2.EVENT_FLAG_LBUTTON:print(按住左键拖动了鼠标)elif eventcv2.EVENT_MBUTTONDOWN :print(单击了中间键)
# 创建名称为 Demo 的响应回调函数 OnMouseAction
# 将响应函数 Demo 与窗口“Demo19.9”建立连接实现绑定
img np.ones((300,300,3),np.uint8)*255
cv2.namedWindow(jiaohu01)
cv2.setMouseCallback(jiaohu01,Demo)
cv2.imshow(jiaohu01,img)
cv2.waitKey()
cv2.destroyAllWindows()运行结果
说明可以通过下面的方法查看 OpenCV 所支持的鼠标事件
import cv2
events[i for i in dir(cv2) if EVENTin i]
print(events)滚动条
滚动条Trackbar在 OpenCV 中是非常方便的交互工具它依附于特定的窗口而存在。 通过调节滚动条能够设置、获取指定范围内的特定值。 在 OpenCV 中函数 cv2.createTrackbar()用来定义滚动条其语法格式为 cv2.createTrackbar(trackbarname, winname, value, count, onChange) 式中
trackbarname 为滚动条的名称。winname 为滚动条所依附窗口的名称。value 为初始值该值决定滚动条中滑块的位置。count 为滚动条的最大值。通常情况下其最小值是 0。onChange 为回调函数。一般情况下将滚动条改变后要实现的操作写在回调函数内。
函数 cv2.createTrackbar()用于生成一个滚动条。拖动滚动条就可以设置滚动条的值并让滚动条返回对应的值。滚动条的值可以通过函数 cv2.getTrackbarPos()获取其语法格式为 retvalgetTrackbarPos( trackbarname,winname ) 式中
retval 为返回值获取函数 cv2.createTrackbar()生成的滚动条的值。trackbarname 为滚动条的名称。winname 为滚动条所依附的窗口的名称。
示例用滚动条实现调色板
在 RGB 颜色空间中任何颜色都是由红R、绿G、蓝B三种颜色构成的每一种颜色分量的区间是[0, 255]。
本节用函数 cv2.createTrackbar()和函数 cv2.getTrackbarPos()设计 一个模拟调色板在窗体中有三个滚动条分别用来设置 R、G、B 的值调色板会根据当前的 R、G、B 值实时显示其所对应的颜色。
import cv2
import numpy as np
def changeColor(x):rcv2.getTrackbarPos(R,image)gcv2.getTrackbarPos(G,image)bcv2.getTrackbarPos(B,image)img[:][b,g,r]
imgnp.zeros((100,700,3),np.uint8)
cv2.namedWindow(image)
cv2.createTrackbar(R,image,0,255,changeColor)
cv2.createTrackbar(G,image,0,255,changeColor)
cv2.createTrackbar(B,image,0,255,changeColor)
while(1):cv2.imshow(image,img)kcv2.waitKey(1)0xFFif k27:break
cv2.destroyAllWindows()示例2用滚动条控制阈值处理参数
import cv2
Type0 # 阈值处理方式
Value0 # 使用的阈值
def onType(a):Type cv2.getTrackbarPos(tType, windowName)Value cv2.getTrackbarPos(tValue, windowName)ret, dst cv2.threshold(o, Value,255, Type)cv2.imshow(windowName,dst)
def onValue(a):Type cv2.getTrackbarPos(tType, windowName)Value cv2.getTrackbarPos(tValue, windowName)ret, dst cv2.threshold(o, Value, 255, Type)cv2.imshow(windowName,dst)
o cv2.imread(lena.png,0)
windowName demo.13 #窗体名
cv2.namedWindow(windowName)
cv2.imshow(windowName,o)
# 创建两个滚动条
tType Type # 用来选取阈值处理方式的滚动条
tValue Value # 用来选取阈值的滚动条
cv2.createTrackbar(tType, windowName, 0, 4, onType)
cv2.createTrackbar(tValue, windowName,0, 255, onValue)
if cv2.waitKey(0) 27:cv2.destroyAllWindows()运行程序在窗体对象内同时显示控制阈值和阈值处理方式的两个滚动条。调整滚动条可以分别控制阈值处理时所使用的阈值和阈值处理方式运行结果如图