RGB渐变色与HSL渐变色

RGB渐变色

计算渐变色时最容易想到的是根据RGB三个通道分别依次增加相应步长来实现,例如从(200,0,0)渐变到(0,200,0),共5种颜色时,结果应为(200,0,0)、(150,50,0)、(100,100,0)、(50,150,0)、(0,200,0)。计算RGB渐变色Python3代码如下:

# RGB渐变色
def get_multi_colors_by_rgb(begin_color, end_color, color_count):
    if color_count < 2:
        return []

    colors = []
    steps = [(end_color[i] - begin_color[i]) / (color_count - 1) for i in range(3)]
    for color_index in range(color_count):
        colors.append([int(begin_color[i] + steps[i] * color_index) for i in range(3)])

    return colors

HSL渐变色

RGB渐变色存在的问题:渐变色比较灰暗、不鲜艳。这是由于该算法生成的渐变色色调、饱和度、亮度的变化违反人类直觉造成的。

HSL色彩模式是工业界的一种颜色标准,是通过对色调(H)、饱和度(S)、亮度(L)三个颜色通道的变化来得到各种颜色的,这个标准几乎包括了人类视力所能感知的所有颜色,是迄今运用最广的颜色系统之一。使用HSL色彩模式计算渐变色可以得到一系列比较鲜艳、明暗均匀的颜色。计算HSL渐变色Python3代码如下:

import cv2 as cv
import numpy as np


# RGB颜色转换为HSL颜色
def rgb2hsl(rgb):
    rgb_normal = [[[rgb[0] / 255, rgb[1] / 255, rgb[2] / 255]]]
    hls = cv.cvtColor(np.array(rgb_normal, dtype=np.float32), cv.COLOR_RGB2HLS)
    return hls[0][0][0], hls[0][0][2], hls[0][0][1]  # hls to hsl


# HSL颜色转换为RGB颜色
def hsl2rgb(hsl):
    hls = [[[hsl[0], hsl[2], hsl[1]]]]  # hsl to hls
    rgb_normal = cv.cvtColor(np.array(hls, dtype=np.float32), cv.COLOR_HLS2RGB)
    return int(rgb_normal[0][0][0] * 255), int(rgb_normal[0][0][1] * 255), int(rgb_normal[0][0][2] * 255)


# HSL渐变色
def get_multi_colors_by_hsl(begin_color, end_color, color_count):
    if color_count < 2:
        return []

    colors = []
    hsl1 = rgb2hsl(begin_color)
    hsl2 = rgb2hsl(end_color)
    steps = [(hsl2[i] - hsl1[i]) / (color_count - 1) for i in range(3)]
    for color_index in range(color_count):
        hsl = [hsl1[i] + steps[i] * color_index for i in range(3)]
        colors.append(hsl2rgb(hsl))

    return colors

需要安装opencv-python

pip install opencv-python

RGB颜色和HSL颜色的具体转换算法可参考:https://docs.opencv.org/4.1.0/de/d25/imgproc_color_conversions.html

RGB渐变色和HSL渐变色的对比

RGB渐变色和HSL渐变色的对比如下图所示,从红色(255,0,0)渐变到绿色(0,255,0),上半部分是RGB渐变色,下半部分是HSL渐变色。

RGB渐变色与HSL渐变色_第1张图片

可以看到RGB渐变色发灰发暗,而HSL渐变色比较鲜艳明亮,推荐使用HSL渐变色

 

你可能感兴趣的:(Python)