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")。
答案 0 :(得分:2)
除了unutbus答案之外,您可能还需要在转换为灰度时注意:均匀加权(取均值)不是唯一或必然正确的方法。
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()