python中使用opencv的HSV颜色空间提取物体

在这里插入图片描述

HSV
H:hue 色相(0~360),红绿蓝
S:saturation饱和度(0~100),形容颜色的深浅,如浅红、大红、深红
V:value色调(0~100),色彩的亮度

但是HSV颜色空间却规定的是,H范围0360,S范围01,V范围0~1

PS中的HSV范围,H是0-360,S是0-1,V(B)是0-1

opencv中的HSV范围,H是0-180,S是0-255,V是0-255

因此需要转换一下

把PS中H的值除以2,S乘255,V乘255,可以得到对应的opencv的HSV值

import cv2

# 滑动条的回调函数,获取滑动条位置处的值
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

path = 'Resources/11.jpg'
# 创建一个窗口,放置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)

猜你喜欢

转载自blog.csdn.net/threestooegs/article/details/127029130