我试图在python中将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
我的问题是,这个程序花费差不多0.24秒@ 1000 * 1000像素图像,这是无法忍受的,因为我的应用程序必须能够处理ms级别的图像,0.02s是可以接受的。 为方便起见,我使用time.clock()分别测量pre_proc,H,S和I部分,我发现pre_proc成本为0.041s,H成本为0.088s,I成本为0.075s,S成本为0.013s。 有没有可以更快地完成这项工作的图书馆?谢谢你的分享。
答案 0 :(得分:2)
我建议您使用OpenCV库。它可以快速实现各种图像处理和计算机视觉操作,包括颜色转换。它有一个Python API。
有关cvtColor方法的文档,请参阅here,这是用于颜色空间转换的OpenCV方法。从RGB到HSI的转换在OpenCV中称为CV_RGB2HLS。