之前接触过PIL(Python Image Library)这个python很方便的图像处理的库,其中封装了不少与图像处理相关的内容。最近在从零开始学习数字图像处理,了解了许多处理的数学原理,凡是数学相关的东西,如果没有自己动手算个几次,称不上对这个内容有所了解。
首先是RGB转灰度图,原理自然是将三个通道的数值计算后得到一个通道的数值。PIL.Image对象有一个方法convert,在官方文档中就写了使用的公式是
于是采用相同的公式,通过简单的代码,计算得到的图像和原图像如下。注意,使用Image.fromarray方法接受的对象需要数值格式是unit8,否则会报错。
from PIL import Image
import numpy as np
jpg_path = "C:/Users/60214/Desktop/python_work/DigitalExecution/girl.jpg"
im = Image.open(jpg_path)
imarray = np.array(im)
height, width, _ = imarray.shape
new_imarray = np.zeros((height, width), dtype = 'uint8')
print(new_imarray.dtype)
def RGB2Gray(R, G, B):
res = int(0.299 * R + 0.587 * G + 0.114 * B)
if res > 255:
return 255
else:
return res
for i in