在没有枕头的蟒蛇中制作黑白图像

时间:2014-04-29 13:00:53

标签: python image-processing numpy matplotlib grayscale

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")。

2 个答案:

答案 0 :(得分:2)

除了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()

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

<强>输出

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

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

答案 1 :(得分:1)

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()