还有其他方法将RGB转换为HSI吗?
我正在尝试把RGB格式的图像转换成HSI格式,下面是我的代码:
#pre_proc
rows, cols = pixels.shape[0], pixels.shape[1]
# transpose to 3 * pixels_number
# utilized for extract R/G/B cols
t_p = pixels.swapaxes(0, 2).swapaxes(1, 2)
R, G, B = t_p[0], t_p[1], t_p[2]
dRG, dRB, dGB = R - G, R - B, G - B # all belongs to [0,255]
dRG[dRG == 0.0] = 0.5
dRB[dRB == 0.0] = 0.5
dGB[dGB == 0.0] = 0.5 # just ignore my divide_zero exception handler
# H part
cos = (dRG+dRB)/(2*numpy.sqrt(dRG**2+dRB*dGB))
H = numpy.arccos(cos)
H[numpy.isnan(H)] = 0.0 # if cos is too big, arccos returns nan
# I part
I = pixels.mean(axis = 2)
# prepare for Saturation calc
Imin = pixels.min(axis = 2)
I[I == 0.0] = 1
# S part
S = 1 - Imin / I
我想问的是,这个过程在处理一张1000*1000像素的图像时,耗时几乎是0.24秒,这对我来说太慢了,因为我的应用需要在毫秒级别处理图像,0.02秒是可以接受的。为了方便你们,我使用了time.clock()来分别测量预处理、H、S和I部分的耗时,结果是预处理耗时0.041秒,H部分耗时0.088秒,I部分耗时0.075秒,S部分耗时0.013秒。有没有什么库可以更快地完成这个转换?谢谢大家的分享。
1 个回答
1
我建议你使用OpenCV这个库。它提供了很多快速的功能,可以处理各种图像处理和计算机视觉的操作,包括颜色转换。而且它有Python的接口。
你可以在这里查看cvtColor方法的文档,这个方法是OpenCV用来进行颜色空间转换的。在OpenCV中,从RGB转换到HSI的操作叫做CV_RGB2HLS。