我正在寻找Python中的快速图像像素操作。有没有办法更快地与两个rgb值进行比较?
img_new = np.ones(img_org.shape[:2], dtype="uint8") * 0
for i in range(img_org.shape[0]):
for j in range(img_org.shape[1]):
if img_org[i, j][0] == 0 and img_org[i, j][2] == 0:
img_new [i, j] = 255
else:
img_new [i, j] = 0
答案 0 :(得分:1)
你可以使用" vectorised"在Numpy比较:
img_new = np.zeros(img_org.shape[:2], dtype="uint8")
img_new[(img_org[:, :, 0] == 0) & (img_org[:, :, 2] == 0)] = 255
表达式img_org[:, :, 0] == 0
采用像素的所有第一个分量(可能是红色通道)的子阵列,并返回与红色通道为0的像素上具有True
的图像大小相同的布尔数组否则False
。然后对绿色通道进行相同的操作,我们使用&
查找红色和绿色通道均为零的所有像素。然后我们使用这个掩码将匹配的像素更新为255。
另请注意,我将np.ones(...) * 0
替换为np.zeros()
,并且我们在代码中不需要else
分支。我们不接触的像素已经为零。