『OpenCV-Python』Trackbar控件的用法

 点赞 + 关注 + 收藏 = 学会了

推荐关注 《OpenCV-Python专栏》

在 OpenCV 中,Trackbar 控件(滑块)是一个非常常用的 GUI 组件,用于在图像处理和计算机视觉任务中进行交互式调整参数。比如说,加载一个图片,通过一个滑块调整图片的亮度,这样便于我们用肉眼观察图片的变化。

Trackbar 允许用户通过拖动滑块来调整参数的值,并且会实时更新显示结果。



比如上图这个例子,创建了3个 Trackbar 控件分别控制图片的 R、G、B 三个通道。拖拽不同通道的滑块后,图片对应的颜色也会跟着修改。

在 OpenCV 中使用 Trackbar 需要用到2个方法:cv2.createTrackbar()cv2.getTrackbarPos()


创建滑块控件

cv2.createTrackbar() 用于创建一个滑块(Trackbar)控件,它接受5个参数。

cv2.createTrackbar(trackbarname, winname, value, count, onChange)
  • trackbarname:滑块的名称(字符串),在窗口中显示。

  • winname:窗口的名称,滑块将被添加到这个窗口中。这个窗口必须在调用 cv2.createTrackbar() 之前通过 cv2.namedWindow() 创建。

  • value:滑块的初始值(整数),表示滑块的默认位置。

  • count:滑块的最大值(整数),表示滑块的可调范围。例如,设置为 255 表示滑块的范围是 0 到 255。

  • onChange:回调函数。当滑块值发生变化时,onChange 函数会被调用。它接收滑块的新值作为参数。如果不需要回调函数,可以传入一个空函数 nothing()。


获取滑块当前值

cv2.getTrackbarPos() 用于获取滑块的当前位置(即当前的值),它接受2个参数。

cv2.getTrackbarPos(trackbarname, winname)
  • trackbarname:要获取值的滑块名称。该名称必须与创建滑块时使用的名称一致。

  • winname:包含滑块的窗口名称。该窗口应该已经通过 cv2.namedWindow() 创建。


举个例子

使用 numpy 要创建一个 480 x 640 像素的图片,这个图片每个像素有3个通道,分别代表R(红)、G(绿)、B(蓝)。用鼠标滑动滑块后,图片每个像素的颜色值也会随之发生变化。



import cv2
import numpy as np

# 初始化默认的RGB通道值
r = 0
g = 0
b = 0

# 回调函数,当滑块值变化时触发
def nothing(x):
   pass

# 创建一个窗口
cv2.namedWindow('RGB Control')

# 创建三个滑块,分别控制 RGB 通道的值
cv2.createTrackbar('Red', 'RGB Control', 0, 255, nothing)
cv2.createTrackbar('Green', 'RGB Control', 0, 255, nothing)
cv2.createTrackbar('Blue', 'RGB Control', 0, 255, nothing)

# 循环显示窗口,实时更新 TrackBar 的值
while True:
   # 获取滑块的当前值
   r = cv2.getTrackbarPos('Red', 'RGB Control')
   g = cv2.getTrackbarPos('Green', 'RGB Control')
   b = cv2.getTrackbarPos('Blue', 'RGB Control')

   # 创建一个新的图像,初始为全黑(0, 0, 0)
   img = np.zeros((480, 640, 3), dtype=np.uint8)

   # 设置图像的RGB通道值
   img[:, :, 0] = b  # 蓝色通道
   img[:, :, 1] = g  # 绿色通道
   img[:, :, 2] = r  # 红色通道

   # 显示图像
   cv2.imshow('RGB Control', img)

   # 按 'ESC' 键退出
   if cv2.waitKey(1) & 0xFF == 27:
       break

# 关闭窗口
cv2.destroyAllWindows()

需要注意,在 OpenCV 中,图片里的像素通道排序是 [B, G, R],和我们平时说的“RGB”排序是反过来的。切记切记。


点赞 + 关注 + 收藏 = 学会了

评论

此博客中的热门博文

『OpenCV-Python』获取图片的基本参数信息

『OpenCV-Python』绘制文

『OpenCV-Python』绘制图