我试图选择非黑色像素,然后将它们着色为黑色,将黑色像素着色为白色。我使用了Stack Overflow 上提供的解决方案,但到目前为止它对我不起作用。import numpy as npimport matplotlib.pyplot as pltimage = 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.dtypedtype('float32')>>> import matplotlib; print(matplotlib.__version__)2.0.0
2 回答
繁花如伊
TA贡献2012条经验 获得超12个赞
怎么换
black_pixels_mask = np.all(image == [0, 0, 0], axis=-1);
到
black_pixels_mask = np.all(image == [0, 0, 0], axis=2)
月关宝盒
TA贡献1772条经验 获得超5个赞
问题是在 matplotlib 版本 <2.2.0 中,当您将数组传递给包含超出预期范围的数据时,没有规范化和任何警告imshow。所以,你可能会得到一些意想不到的结果,比如这里:Bizzare matplotlib behavior in display 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不规范 RGB 图像中的颜色范围,以及拉取请求:将RGB 数据剪辑到imshow.
添加回答
举报
0/150
提交
取消