HSV调试工具

Opencv经常会读取hsv颜色空间的图片,在图片上使用颜色提取器往往不能得到准确结果;如果图像中有多个颜色的不同目标,颜色提取工作也是很麻烦的。

此工具可以导入一张图片,通过6个进度条的拖动操作来实现HSV三个值的上下限设定,并将结果实时显示到mask和result层,从而缓解上述问题。

图形界面

仅需拖动进度条,即可快速定位多个目标的HSV范围,甚至可以精确到某一个值。
代码如下:

import cv2  
import numpy as np  

path = r'D:\PlayGround\CVP\return.png'  #图像的位置,使用时仅需修改这一属性
# 滑动条的回调函数,获取滑动条位置处的值  
def empty(a):  
    h_min = cv2.getTrackbarPos("Hue Min", "TrackBars")  
    h_max = cv2.getTrackbarPos("Hue Max", "TrackBars")  
    s_min = cv2.getTrackbarPos("Sat Min", "TrackBars")  
    s_max = cv2.getTrackbarPos("Sat Max", "TrackBars")  
    v_min = cv2.getTrackbarPos("Val Min", "TrackBars")  
    v_max = cv2.getTrackbarPos("Val Max", "TrackBars")  
    print(h_min, h_max, s_min, s_max, v_min, v_max)  
    return h_min, h_max, s_min, s_max, v_min, v_max  
    
# 创建一个窗口,放置6个滑动条  
cv2.namedWindow("TrackBars")  
cv2.resizeWindow("TrackBars", 640, 240)  
cv2.createTrackbar("Hue Min", "TrackBars", 0, 179, empty)  
cv2.createTrackbar("Hue Max", "TrackBars", 19, 179, empty)  
cv2.createTrackbar("Sat Min", "TrackBars", 110, 255, empty)  
cv2.createTrackbar("Sat Max", "TrackBars", 240, 255, empty)  
cv2.createTrackbar("Val Min", "TrackBars", 153, 255, empty)  
cv2.createTrackbar("Val Max", "TrackBars", 255, 255, empty)  
  
while True:  
    img = cv2.imread(path)  
    imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)  
    # 调用回调函数,获取滑动条的值  
    h_min, h_max, s_min, s_max, v_min, v_max = empty(0)  
    lower = np.array([h_min, s_min, v_min])  
    upper = np.array([h_max, s_max, v_max])  
    # 获得指定颜色范围内的掩码  
    mask = cv2.inRange(imgHSV, lower, upper)  
    # 对原图图像进行按位与的操作,掩码区域保留  
    imgResult = cv2.bitwise_and(img, img, mask=mask)  
    cv2.imshow("Mask", mask)  
    cv2.imshow("Result", imgResult)  
    cv2.waitKey(1)

[[|代码工具]]