学习来自 OpenCV基础(12)OpenCV GUI中的鼠标和滑动条
文章目录
- GUI 滑条介绍
- cv2.createTrackbar 介绍
- 牛刀小试
GUI 滑条介绍
GUI滑动条是一种直观且快速的调节控件,主要用于改变一个数值或相对值。以下是关于GUI滑动条的详细介绍:
一、功能和应用:
滑动条可应用于多种调节功能中,如温度、音量、亮度等。
它允许用户通过拖动滑块来改变一个数值或相对值,从而实现对某个参数或设置的快速调整。
二、类型:
滑动条有垂直(JScrollBar.VERTICAL)和水平(JScrollBar.HORIZONTAL)两种类型,分别用于垂直和水平方向的数值调节。
三、范围设置:
滑动条具有可自定义的最大值和最小值。例如,在MATLAB GUI编程中,可以通过设置滑动条的“min”和“max”属性来定义其范围。
四、显示与交互:
滑动条通常与文本框或其他显示控件结合使用,以便用户能够直观地看到当前的数值或相对值。
当用户拖动滑块时,滑动条会触发一个回调函数(Callback),该函数可以获取滑动条的当前值,并根据需要进行相应的处理或显示。
五、自定义:
滑动条的外观和行为可以通过多种属性进行自定义,如滑块的颜色、大小、形状等。
在某些GUI设计工具中,还可以为滑动条添加自定义的图片或图标,以提供更好的用户体验。
六、编程实现:
在编程实现GUI滑动条时,通常需要创建一个滑动条控件,并设置其属性(如范围、初始值等)。
然后,需要编写一个回调函数来处理滑动条的事件(如用户拖动滑块)。在回调函数中,可以获取滑动条的当前值,并更新其他控件的显示或执行相应的操作。
七、示例:
例如,在MATLAB GUI编程中,可以使用App Designer或GUIDE等工具来创建滑动条控件。然后,通过双击滑动条来查看其属性并设置范围等参数。接下来,可以编写一个回调函数来获取滑动条的当前值,并将其显示在文本框中或用于其他计算和操作。
八、总结:
GUI滑动条是一种功能强大且易于使用的控件,它允许用户通过拖动滑块来快速改变一个数值或相对值。通过合理的设计和编程实现,滑动条可以为用户提供直观、便捷的交互体验。
cv2.createTrackbar 介绍
cv2.createTrackbar 是 OpenCV-Python 中用于在窗口中创建滑动条(Trackbar)的函数。以下是对 cv2.createTrackbar 函数的中文文档说明:
一、函数原型
cv2.createTrackbar(trackbarName, windowName, value, count, onChange=None, userdata=None)
二、参数说明
trackbarName (str): 滑动条的名称。
windowName (str): 滑动条所附着的窗口的名称。
value (int): 滑动条的默认值(整数类型)。创建时,滑块位置由此变量定义。
count (int): 滑动条的最大值。注意,滑动条的最小位置始终为 0。
onChange (callable, optional): 回调函数,每次滑动都会调用该函数。该函数通常都会含有一个默认参数,即滑动条的位置。如果未提供,则默认为 None。
userdata (any, optional): 按原样传递到回调函数的用户数据。它可用于处理跟踪条事件,而无需使用全局变量。如果未提供,则默认为 None。
三、返回值
该函数没有返回值。
牛刀小试
输入图片
实现根据滑动条来缩放图片
1/2 至 2 倍之间
import cv2
maxScaleUp = 150
scaleFactor = 1
windowName = "Resize Image"
trackbarValue = "Scale" # 滑动条的名字
# 读取图片
image = cv2.imread("1.jpg")
# 创建一个显示结果的窗口,并将标志设置为“cv2.WINDOW_AUTOSIZE”
cv2.namedWindow(windowName, cv2.WINDOW_AUTOSIZE)
# 回调函数
def scaleImage(*args):
# 从滑动条得到比例因子
scaleFactor = 0.5 + args[0]/100.0
# 调整图像大小
scaledImage = cv2.resize(image, None, fx=scaleFactor, fy= scaleFactor, interpolation=cv2.INTER_LINEAR)
cv2.imshow(windowName, scaledImage)
# 创建滑动条并关联回调函数
cv2.createTrackbar(trackbarValue, windowName, scaleFactor, maxScaleUp, scaleImage)
# 显示图像
cv2.imshow(windowName, image)
c = cv2.waitKey(0)
cv2.destroyAllWindows()
初始化到时候,为原图
拖动到最小,为原图的一半
拖拽到最大,为原图的两倍