【问题标题】:Python: cmap argument in matplotlib imshow() generates different binary imagesPython:matplotlib imshow() 中的 cmap 参数生成不同的二进制图像
【发布时间】:2019-07-19 11:45:36
【问题描述】:

通过设置 cmap="gray" 可以正确显示二进制图像。

import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline
square = np.array([[0, 0, 0, 0, 0],
                   [0, 1, 1, 1, 0],
                   [0, 1, 1, 1, 0],
                   [0, 1, 1, 1, 0],
                   [0, 0, 0, 0, 0]], dtype=np.uint8)
fig = plt.figure(figsize=(3,3))
plt.imshow(square, cmap="gray")
plt.show()

但是,当我们将其更改为“二进制”时,imshow() 会生成反向图像!

plt.imshow(square, cmap="binary")

这种奇怪行为的原因是什么?

【问题讨论】:

    标签: python matplotlib image-processing


    【解决方案1】:

    这是Colormap reference of the matplotlib documentation的截图:

    可以看出binary从白色开始到黑色,而gray从黑色开始到白色。

    【讨论】:

    • 感谢您的回答。你知道这些选择的原因吗?
    • 不确定“这样的选择”指的是什么。
    • 二进制阵营的库开发者选择 0 为白色和 1 为黑色是否有历史原因?然而,在图像处理中,通常使用反向设置。 @ImportanceOfBeingErnest
    • 一般来说至少应该有black->white和white->black这两个选项。那么问题是如何命名它们。原则上,您可以将一个命名为“gray”,另一个命名为“gray_r”。但是_r 语法对于用户来说并不是很容易发现,因此可以想出一个更好的名称。 “二进制”是有意义的,因为 0 通常什么都不是(=白色),而 1 是某种东西(=黑色)。
    【解决方案2】:

    您可以查看下面的matplotlib 颜色图,其中二进制是灰色的反面,这就是您得到高于结果的原因。

    here了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-24
      • 1970-01-01
      相关资源
      最近更新 更多