博主欢迎转载,但请一定要给出原文链接,标注出处!!!谢谢~
http://blog.csdn.net/sunny_xsc1994/article/details/78541079
特别不喜欢那些随便转载别人的原创文章又不给出链接的
所以不准偷偷复制博主的博客噢~~
色彩空间转换
最近因为一直在涉及图形处理方面的东西,所以免不了要涉及到色彩的转化,网上找了合适的rgb2lab以及rgb2hsl的代码。
但是在用的时候,一般对于一张图来说,至少几十万的像素点,一个个的像素点转化太费时间了。因此,索性重写了转化代码,可以对n个色彩同时进行转化,采用矩阵运算,速度飞快。
代码是python的,需要有numpy环境,代码下载地址见文章最后。
RGB:0…255
LAB:
L:Lightness 0...100
A: -128...127
B: -128...127
HSL:
h(float): hue 0...1
s(float): Saturation 0...1 (0=toward grey, 1=pure color)
l(float): Lightness 0...1 (0=black 0.5=pure color 1=white)
rgb2lab,lab2rgb
单个色彩转换
import LAB
rgb=[123,245,211]
lab=LAB.rgb2lab(rgb)
rgb=LAB.lab2rgb(lab)
多个色彩转换
import LAB
import numpy as np
colors=np.random.randint(0,255,size=(900*600,3))
labs=LAB.rgb2lab_matrix(colors)
rgbs=LAB.lab2rgb_matrix(labs)
rgb2hsl,hsl2rgb
单个色彩转换
import HSL
rgb=[123,245,211]
hsl=HSL.rgb2hsl(rgb)
rgb=HSL.hsl2rgb(hsl)
多个色彩转换
import LAB
import numpy as np
colors=np.random.randint(0,255,size=(900*600,3))
hsls=LAB.rgb2hsl_matrix(colors)
rgbs=LAB.hsl2rgb_matrix(hsls)
时间比较
n为600*900大小的数据,可以发现,矩阵运算速度是真的快。
| time | single for n times | matrix |
| -------- |:------------------:|:------:|
| rgb2lab | 5.923s | 0.234s |
| lab2rgb | 7.313s | 0.235s |
| | | |
| rgb2hsl | 4.782s | 0.156s |
| hsl2rgb | 3.249s | 0.140s |