【问题标题】:Converting all non-black pixels into one colour doesn't produce expected output将所有非黑色像素转换为一种颜色不会产生预期的输出
【发布时间】:2019-06-10 08:38:15
【问题描述】:

我正在尝试选择非黑色像素,然后将它们着色为黑色,将黑色像素着色为白色。我使用了 Stack Overflow 上提供的 solution,但到目前为止它对我不起作用。

import numpy as np
import matplotlib.pyplot as plt


image = plt.imread('Perforated_carbon/faltu.png')
plt.imshow(image)
plt.show()

image_copy = image.copy()

black_pixels_mask = np.all(image == [0, 0, 0], axis=-1)

non_black_pixels_mask = ~black_pixels_mask
# or non_black_pixels_mask = np.any(image != [0, 0, 0], axis=-1)  

image_copy[black_pixels_mask] = [255, 255, 255]
image_copy[non_black_pixels_mask] = [0, 0, 0]

plt.imshow(image_copy)
plt.show()

这是我目前得到的图像

我最想要的是这个

补充资料:

>>> image.shape
(256, 192, 3)
>>> image.dtype
dtype('float32')
>>> import matplotlib; print(matplotlib.__version__)
2.0.0

【问题讨论】:

  • black_pixels_mask 的大小是否符合您的预期?它有 0 和 1 吗?
  • 为什么不直接使用black_pixels_mask 作为输出图像?也许它需要转换为不同的类型,但我看不出你做这个索引的意义......
  • @CrisLuengo 是的,plt.imshow(black_pixels_mask, cmap='Greys_r') 可以,IIUC。

标签: python numpy matplotlib image-processing


【解决方案1】:

换个方式

black_pixels_mask = np.all(image == [0, 0, 0], axis=-1); 

black_pixels_mask = np.all(image == [0, 0, 0], axis=2)

【讨论】:

    【解决方案2】:

    问题在于,在 matplotlib 版本 imshow 时,没有 normalization 和任何警告。所以,你可能会得到一些意想不到的结果,比如这里:Bizzare matplotlib behaviour in displaying images cast as floats

    如果您将 matplotlib 更新为 >=2.2.0 版本,则在运行问题中的代码时,您将看到以下警告:

    Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).
    

    生成的图像将是您想要获得的图像。所以,我给你的建议是更换

    image_copy[black_pixels_mask] = [255, 255, 255]
    

    通过

    image_copy[black_pixels_mask] = [1, 1, 1]
    

    而且还需要更新 matplotlib。

    这里是 GitHub 上的相关问题:imshow doesn't normalize the color range in RGB images,以及一个拉取请求:Clip RGB data to valid range for imshow

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-04
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多