计算机系统应用教程网站

网站首页 > 技术文章 正文

从零学AI之图像算法11:图像饱和度处理

btikc 2024-09-30 13:12:31 技术文章 11 ℃ 0 评论

图像饱和度是指图像色彩的纯洁性程度,也称为颜色的鲜艳程度,是“色彩三属性”之一。我们经常听到浅红色没有深红色颜色红,这种感受就是图像色彩属性的人类最直接感觉。饱和度取决于该色中含色成分和消色成分的比例,其中含色成分越大,那么饱和度就越大,同理,如果消色成分越大,必然饱和度越小。


颜色有RGB,HSV,HLS等多种色彩属性模式,本次主要比较几种不同方法的颜色饱和度调整效果。

原始图像:


方法1效果:


方法2效果:

方法3效果:


def hsv(cv2_img, S, L, V, MAX):
    """ HSV 调整 """
    cv2_img = cv2_img.astype(np.float32)
    cv2_img = cv2_img / 255.0
    HSV = cv2.cvtColor(cv2_img, cv2.COLOR_BGR2HSV)
    HSV2 = np.copy(HSV)
    HSV2[:, :, 1] = (1.0 + V / float(MAX)) * HSV2[:, :, 1] ## 明度
    HSV2[:, :, 1][HSV2[:, :, 1] > 1] = 1
    HSV2[:, :, 2] = (1.0 + S / float(MAX)) * HSV2[:, :, 2]  ### 饱和度
    HSV2[:, :, 2][HSV2[:, :, 2] > 1] = 1
    
    adjImg = cv2.cvtColor(HSV2, cv2.COLOR_HSV2BGR)
    adjImg = adjImg * 255.0
    adjImg = adjImg.astype(np.uint8)
    
    del cv2_img, HSV, HSV2
    return adjImg
    

def hsl(cv2_img, S, L, V, MAX):
    """ HSL 饱和度调整 """
    cv2_img = cv2_img.astype(np.float32)
    cv2_img = cv2_img / 255.0
    HLS = cv2.cvtColor(cv2_img, cv2.COLOR_BGR2HLS)
    HLS2 = np.copy(HLS)
    HLS2[:, :, 1] = (1.0 + L / float(MAX)) * HLS2[:, :, 1] ## 明度
    HLS2[:, :, 1][HLS2[:, :, 1] > 1] = 1
    HLS2[:, :, 2] = (1.0 + S / float(MAX)) * HLS2[:, :, 2]  ### 饱和度
    HLS2[:, :, 2][HLS2[:, :, 2] > 1] = 1
    
    adjImg = cv2.cvtColor(HLS2, cv2.COLOR_HLS2BGR)
    adjImg = adjImg * 255.0
    adjImg = adjImg.astype(np.uint8)
    
    del cv2_img, HLS, HLS2
    return adjImg


def saturationAdjust(cv2_img):
    
    #### 图像颜色饱和度 
    cv2.namedWindow("SatuAdj", 0)
    cv2.createTrackbar('S', 'SatuAdj', 10, 100, callback)
    cv2.createTrackbar('V', 'SatuAdj', 10, 100, callback)
    cv2.createTrackbar('L', 'SatuAdj', 10, 100, callback)
    cv2.createTrackbar('I', 'SatuAdj', -100, 100, callback)
    cv2.createTrackbar('Max', 'SatuAdj', 60, 360, callback)
    
    ####视图区域
    input_img = cv2_img.copy()
    while True:
        S, V, L, I, MAX = callback(0)
        hsv_img = hsv(input_img.copy(), S, L, V, MAX)
        hsl_img = hsl(input_img.copy(), S, L, V, MAX)
        rgb_img = rgb(input_img.copy(), I)
        mat_img = np.hstack((input_img, hsv_img, hsl_img, rgb_img))
        text = f"Max:{MAX},S:{S}, V:{V}, L:{L}"
        cv2.putText(mat_img, text, (10, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 1)
        cv2.imshow("SatuAdj", mat_img)
        cv2.waitKey(1)
        


示例2:

调整结果来看,在RGB上效果较差,不稳定,HSL和HSV相当。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表