如何使用OpenCV Python创建HSV颜色空间的颜色条
为了将 HSV(色调,饱和度和值) 颜色空间作为颜色条,我们需要应用两种不同的函数。这两个函数是 cv2.createTrackbar() 和 cv2.getTrackbarPos() 。
- 函数 cv2.reateTrackbar() 用于创建颜色条,而函数 cv2.getTrackbarPos() 用于访问所选颜色条位置的值。
-
使用这两个函数,我们创建一个窗口,其中包含用于 H,S,V 颜色的颜色条和一个显示所选颜色的颜色窗口。通过更改颜色条的位置,我们可以选择特定颜色的值。
-
颜色 H 的范围是 0 到 179 ,而对于 S 和 V ,它在 0 和 255 之间。
语法
cv2.createTrackbar(trackbar_name, window_name, default_value, max_value, callback_func)
cv2.getTrackbarPos(trackbar_name, window_name)
参数
-
trackbar_name - 颜色条名称。该名称用于访问颜色条位置值。
-
window_name - 附加颜色条的窗口名称。
-
default_value - 设置颜色条的默认值。
-
max_value - 颜色条的最大值。
-
callback_func - 当颜色条值发生变化时执行的函数。
步骤
若要将 HSV 颜色空间作为颜色条,可以按照以下步骤执行-
第一步是导入所需的库。所需的Python库为 OpenCV 和 NumPy 。请确保您已经安装了它们。
import cv2
import numpy as np
接下来定义一个 回调函数 。它将颜色条位置作为默认参数。我们定义此函数不执行任何操作。
def nothing(x):
pass
定义黑色图像并创建名为 HSV颜色条 的窗口。颜色条和颜色将显示在此窗口中。
img = np.zeros((300,650,3), np.uint8)
window_name = 'Trackbar Color Palette'
cv2.namedWindow(window_name, cv2.WINDOW_AUTOSIZE)
为颜色更改创建颜色条,传递所有五个参数。
cv2.createTrackbar('H',window_name,0,179,nothing)
cv2.createTrackbar('S',window_name,0,255,nothing)
cv2.createTrackbar('V',window_name,0,255,nothing)
获取所有三种 HSV 颜色的当前颜色条位置。
h = cv2.getTrackbarPos('H',window_name)
s = cv2.getTrackbarPos('S',window_name)
v = cv2.getTrackbarPos('V',window_name)
为上述颜色更新颜色图像窗口。并将图像颜色转换为 BGR 。
img[:] = [h,s,v]
img = cv2.cvtColor(img, cv2.COLOR_HSV2BGR)
现在显示所选颜色条值的颜色图像窗口中的颜色。
while(True):
cv2.imshow(window_name,img)
k = cv2.waitKey(1) & 0xFF
if k == ord('q'):
break
示例1
在此Python程序中,我们创建一个颜色调板作为窗口。我们为红色,绿色和蓝色颜色创建了三个颜色条。通过滑动颜色条,您将在颜色窗口中获得相应的颜色显示。
# 导入所需的库文件
import cv2
import numpy as np
def nothing(x):
pass
# 创建黑色图像和窗口
img = np.zeros((300,650,3), np.uint8)
img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
window_name = 'HSV 颜色调色板'
cv2.namedWindow(window_name, cv2.WINDOW_AUTOSIZE)
# 创建颜色调整的滑动条
cv2.createTrackbar('H',window_name,0,179,nothing)
cv2.createTrackbar('S',window_name,0,255,nothing)
cv2.createTrackbar('V',window_name,0,255,nothing)
while(True):
cv2.imshow(window_name,img)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
break
# 获取四个滑动条的当前位置
h = cv2.getTrackbarPos('H',window_name)
s = cv2.getTrackbarPos('S',window_name)
v = cv2.getTrackbarPos('V',window_name)
img[:] = [h,s,v]
img = cv2.cvtColor(img, cv2.COLOR_HSV2BGR)
cv2.destroyAllWindows()
输出
运行上面的代码后,将显示以下输出窗口。按下“ q ”键可关闭输出窗口。
三个滑动条的默认值都是 0 ,窗口的颜色是黑色。滑动滑动条,您将看到颜色窗口中对应的颜色。
示例2
在这个程序中,我们创建了一个窗口作为 HSV 颜色调色板,其中包含一个 switch 按钮。我们创建了四个滑动条,三个用于 HSV颜色 ,一个用于 switch 按钮。
当 switch 按钮处于 ON 状态时,才会显示颜色图像中的颜色。滑动滑动条,您将在颜色窗口中得到相应的颜色显示。
导入 cv2
导入 numpy 作为 np
定义 nothing(x):
pass
# 创建一个黑色图像,一个窗口
img = np.zeros((300,650,3), np.uint8)
img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
window_name = 'HSV Color Palette'
cv2.namedWindow(window_name, cv2.WINDOW_AUTOSIZE)
# 为颜色变化创建滑块
cv2.createTrackbar('H',window_name,0,179,nothing)
cv2.createTrackbar('S',window_name,0,255,nothing)
cv2.createTrackbar('V',window_name,0,255,nothing)
# 创建开关以进行打开/关闭功能
# switch = '0 : OFF \n1 : ON'
cv2.createTrackbar('switch', window_name,0,1,nothing)
while(True):
cv2.imshow(window_name,img)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
break
# 获取四个滑块的当前位置
h = cv2.getTrackbarPos('H',window_name)
s = cv2.getTrackbarPos('S',window_name)
v = cv2.getTrackbarPos('V',window_name)
sw = cv2.getTrackbarPos('switch',window_name)
if sw == 0:
img[:] = 0
else:
img[:] = [h,s,v]
img = cv2.cvtColor(img, cv2.COLOR_HSV2BGR)
cv2. destroyAllWindows())
输出
当您运行上面的程序时,它将显示以下输出窗口。要关闭输出窗口,请按“ q ”按钮。
默认情况下,所有滑块的值均为 0 。窗口的颜色为黑色。当您打开开关(选择为 1 )并将 HSV 颜色滑块滑动到所需值时,窗口的颜色将与设置的值对应。对于明亮的颜色,请选择最大的 S 和 V 滑块值并滑动 H 滑块。
当开关关闭时,滑动滑块将不会有任何变化。
如果在开关关闭时(设置为0)滑动滑动条,则窗口的颜色不会发生变化。它将保持原样(即黑色)。