为了账号安全,请及时绑定邮箱和手机立即绑定

将所有非黑色像素转换为一种颜色不会产生预期的输出

将所有非黑色像素转换为一种颜色不会产生预期的输出

慕后森 2021-10-12 15:09:17
我试图选择非黑色像素,然后将它们着色为黑色,将黑色像素着色为白色。我使用了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)


查看完整回答
反对 回复 2021-10-12
?
月关宝盒

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.


查看完整回答
反对 回复 2021-10-12
  • 2 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信