『opencv-380玩彩网官网入口
点赞 关注 收藏 = 学会了
推荐关注
在 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”排序是反过来的。切记切记。
点赞 关注 收藏 = 学会了
本作品采用《cc 协议》,转载必须注明作者和本文链接