我已经创建了一个脚本,可以将图像的色相在色彩轮上循环移位任意次数。
当我使用PIL导入图像并将其转换为Numpy数组时,它会以如下形式呈现:(x, y, (r,g,b))。
我使用Skimage color模块将此数组从RGB转换为HSV色彩空间(在将RGB值缩放到[0, 1.0]范围之后)。
我遇到的问题是仅操纵所有像素的HSV值中的一个(H、S或V)。 我想要有效地添加,乘以或减去任何这三个维度中的任何一个维度。
我通过将HSV值分成三个单独的数组来使其正常工作:
当我使用PIL导入图像并将其转换为Numpy数组时,它会以如下形式呈现:(x, y, (r,g,b))。
我使用Skimage color模块将此数组从RGB转换为HSV色彩空间(在将RGB值缩放到[0, 1.0]范围之后)。
我遇到的问题是仅操纵所有像素的HSV值中的一个(H、S或V)。 我想要有效地添加,乘以或减去任何这三个维度中的任何一个维度。
我通过将HSV值分成三个单独的数组来使其正常工作:
h,s,v = np.dsplit(hsv,3)
按照我想要的方式操作数组:
h_new = np.multiply(h,.33)
然后重新组装数组:
hsv_new = np.stack((h_new,s,v))
这似乎不是最有效的方法,因此我的问题是:
如何在不必将数组拆分为块的情况下操纵每个维度?
hsv[:]
是整个数组hsv
的视图。从对象的角度来看,它们并不是同一个对象,因为hsv[:] is not hsv
,但它们共享相同的底层数据。hsv[:].shape
和hsv.shape
是相同的。对于hsv[:][:]
也是一样的情况。查看它们的形状,一切都会变得清晰明了。 - unutbu