Python 将RGB图像按numpy中的灰度元素进行分割

Python 将RGB图像按numpy中的灰度元素进行分割,python,numpy,Python,Numpy,假设我们有两个形状数组(480,640,3)和(480,640),比如RGB和灰度图像。如何将elementwise第一个数组除以第二个数组?到目前为止,我使用了以下代码,但是有更好的代码片段吗 arr1[:, :, 0] /= arr2 arr1[:, :, 1] /= arr2 arr1[:, :, 2] /= arr2 嗯。。。你也许可以复制你的灰度阵列,只做一次除法 arr1 /= arr2.repeat(3).reshape(np.shape(arr1)) 下面是一个可能有用的片段

假设我们有两个形状数组(480,640,3)和(480,640),比如RGB和灰度图像。如何将elementwise第一个数组除以第二个数组?到目前为止,我使用了以下代码,但是有更好的代码片段吗

arr1[:, :, 0] /= arr2
arr1[:, :, 1] /= arr2
arr1[:, :, 2] /= arr2

嗯。。。你也许可以复制你的灰度阵列,只做一次除法

arr1 /= arr2.repeat(3).reshape(np.shape(arr1))

下面是一个可能有用的片段:

result = np.dstack([x/np.reshape(arr2,(480,640,1)) for x in np.dsplit(arr1,3)])

将RGB阵列拆分为3个2D阵列,每个阵列除以灰度阵列并重新组合。

您可以将另一个轴添加到
arr2
,这样它就可以

您可以使用在向
arr2
添加单例维度后,对
arr1
元素进行原位编辑,因为您的代码似乎就是这样做的。这样做的好处是内存效率高。下面是实现-

np.divide(arr1,arr2[:,:,None],arr1)

您还可以使用的广播功能-

arr1 = np.einsum('ijk,ij->ijk',arr1,1/arr2)

是的,它起作用了。还有两个这样的代码片段
arr1/cv2.cvtColor(arr2,cv2.cv.cv_GRAY2BGR)
arr1/np.dstack((arr2,arr2,arr2))
。缺点是arr1的最后一个维度应该是3,当arr1是灰度时需要单独处理。我认为
arr1/np。dstack([arr2]*3)
也应该工作
arr1 = np.einsum('ijk,ij->ijk',arr1,1/arr2)