2017-06-12 88 views
0

我正在寻找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 

回答

1

可以使用在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取像素的所有第一组分(可能是红色信道)的子阵列,并返回一个布尔数组大小相同作为True的图像,其中红色通道为0,否则为False。然后对绿色通道进行同样的操作,我们使用&来查找红色和绿色通道都为零的所有像素。然后,我们使用此遮罩将匹配像素更新为255.

另请注意,我将np.ones(...) * 0替换为np.zeros(),并且我们不需要代码中的else分支。我们不接触的像素已经为零。

+0

令人敬畏的速度和代码改进!很好的解释,多谢@Sven Marnach – snowflake