首页 > 编程知识 正文

渐变色RGB,RGB和HSL都属于颜色模型

时间:2023-05-05 19:47:38 阅读:264315 作者:2478

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 cvimport 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渐变色比较鲜艳明亮,推荐使用HSL渐变色

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。