opencv+python入门学习之三 HSV图像

HSV:色调(H),0°~360°,R 0° G 120° B 240°,饱和度(S) 0-1,明度(V) 0-1
六棱锥模型,其更好地符合人类感觉颜色
六棱锥

HSV公式
RGB转HSV 难点是opencv图像保存格式 H:0-180 S:0-255 V:0-255

def RGB2HSV(image):
    if image.size != False:
        img = image.copy()
        for i in range(img.shape[0]):
            for j in range(img.shape[1]):
                R = img[i, j, 2]/255.0 #归一化 不会溢出了
                G = img[i, j, 1]/255.0
                B = img[i, j, 0]/255.0
                max_ = max(B, G, R)
                min_ = min(B, G, R)
                if max_ == min_:
                    H = 0.0
                elif max_ == R:
                    if G >= B:
                        H = (G - B) / (max_ - min_) * 60
                    else:
                        H = (G - B) / (max_ - min_) * 60+360
                elif max_ == G:
                    H = (B - R) / (max_ - min_) * 60 + 120
                else:
                    H = (R - G) / (max_ - min_) * 60 + 240
                if max == 0:
                    S =0
                else:
                    S = (max_ - min_) / max_
                V = max_
                img[i, j, 2] = V*255
                img[i, j, 1] = S*255
                img[i, j, 0] = H/2
        return img

opencv库函数

img_1 = cv.cvtColor(img, cv.COLOR_RGB2HSV)

HSV转RGB 难点是opencv图像保存格式 H:0-180 S:0-255 V:0-255转换成H:0-360 S:0-1 V:0-1

def HSV2RGB(image):
    img = image.copy()
    for i in range(img.shape[0]):
        for j in range(img.shape[1]):
            V = img[i, j, 2]/255
            S = img[i, j, 1]/255
            H = img[i, j, 0]*2
            hi = int(H//60)
            f = H/60-hi
            p = V * (1-S)
            q = V * (1-f*S)
            t = V * (1-(1-f)*S)
            if hi == 0:
                R,G,B= (V, t, p)
            elif hi == 1:
                R,G,B= (q, V, p)
            elif hi == 2:
                R,G,B= (p, V, t)
            elif hi == 3:
                (R,G,B)= (p, q, V)
            elif hi == 4:
                R,G,B= (t, p, V)
            elif hi == 5:
                R,G,B= (V, p, q)
            img[i, j, 2] = R*255
            img[i, j, 1] = G*255
            img[i, j, 0] = B*255
    return img

opencv库函数 HSV 转BGR

img__1 = cv.cvtColor(img_, cv.COLOR_HSV2BGR)

猜你喜欢

转载自blog.csdn.net/liuyang_1106/article/details/88237264