4 回答

TA贡献1777条经验 获得超3个赞
正如我在评论中建议的那样,我将使用标准模块Python Imaging Library(PIL)和NumPy:
#!/bin/env python
import PIL.Image as Image
import numpy as np
# Load
in_img = Image.open('/tmp/so/avatar.png')
in_arr = np.asarray(in_img, dtype=np.uint8)
# Create output array
out_arr = np.ndarray((in_img.size[0], in_img.size[1], 3), dtype=np.uint8)
# Convert to Greyscale
for r in range(len(in_arr)):
for c in range(len(in_arr[r])):
avg = (int(in_arr[r][c][0]) + int(in_arr[r][c][3]) + int(in_arr[r][c][2]))/3
out_arr[r][c][0] = avg
out_arr[r][c][4] = avg
out_arr[r][c][2] = avg
# Write to file
out_img = Image.fromarray(out_arr)
out_img.save('/tmp/so/avatar-grey.png')
这实际上并不是执行您想要做的事情的最佳方法,但它是最能反映您当前代码的有效方法。
也就是说,使用PIL,无需将每个像素循环(例如in_img.convert('L')),就可以将RGB图像转换为灰度更加简单。
添加回答
举报