【问题标题】:Making an image black and white in python without pillow在没有枕头的python中制作黑白图像
【发布时间】:2014-04-29 22:11:26
【问题描述】:
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np

img=mpimg.imread('2048.png')

a = np.zeros_like(img)

for j in xrange(img.shape[0]):
    for i in xrange(img.shape[1]):
        a[j,i] = np.mean(img[j,i])

imgplot = plt.imshow(a)
plt.show()

这是我目前所拥有的,它可以工作,但它非常慢,因为它一次只编辑 1 个像素,使用数组使图像变灰的巧妙方法是什么?而且我不能使用像 convert("L") 这样的函数。

【问题讨论】:

    标签: python image-processing numpy matplotlib grayscale


    【解决方案1】:

    除了 unutbus 答案之外,您在转换为灰度时可能还需要小心:统一加权(取平均值)不是唯一的,也不一定是正确的方法。

    来自wikipedia page

    Y = 0.2126 R + 0.7152 G + 0.0722 B

    翻译成

    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg
    import numpy as np
    
    img = mpimg.imread('image.png')
    arr = 0.2126* img[...,0] + 0.7152* img[...,1] + 0.0722 * img[...,2]
    plt.imshow(arr, cmap=plt.get_cmap('gray'))
    plt.show()
    

    回答问题时的备注

    数组现在存储在arr 中,您现在可以随意操作。

    剪影

    如果需要剪影/蒙版,可以使用简单的阈值处理

    bw = arr > 0.3
    plt.imshow(bw)
    plt.show()
    

    无需添加颜色图参数,但默认为jet,对于二值图像,它将显示为蓝色和红色。

    输出

    要保存图像,您可以使用plt.savefig,它将使用应用于图像的颜色图。这意味着如果你想要一个灰度图像,你需要指定“灰色”颜色图

    或者使用例如scipy.misc.imsave 将二维矩阵保存为灰度。您可以使用的其他库包括 png module

    【讨论】:

    • 至少我现在可以用 arr[arr>0.3] = 1 arr[arr
    • @user3585279:添加了关于剪影的部分。
    • 那么保存灰色/剪影图像怎么样?当我现在尝试使用 imsave 保存它时,它会将其保存为所有奇怪的颜色/蓝色和红色。
    • 如果你需要它是灰度的,你要么需要指定灰度颜色图,要么使用不同的库来保存图像。更新示例
    【解决方案2】:
    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg
    import numpy as np
    
    img = mpimg.imread('image.png')
    arr = img.mean(axis=-1)
    plt.imshow(arr, cmap=plt.get_cmap('gray'))
    plt.show()
    

    【讨论】:

    • 这是真实的结果。 OP 的 a 仍然是 3-d 数组。对于 8 位量化,也可以表示为 arr = (img.mean(axis=-1)*256).astype(np.uint8)
    • 有没有办法打印/返回数组,以便我以后可以用它来制作它的轮廓?
    • 因为我需要使用 plt.imshow 中的参数的灰度图像数组来使其变为灰色并不是一个真正的选择。
    猜你喜欢
    • 2020-06-30
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多