Python中的PIL从易到难

要了解复杂的处理算法,值得分析标准方案,我建议从中开始。

对于处理示例,将使用具有不同颜色集的图像:

图片

首先,我们需要两个库模块:

from PIL import Image, ImageDraw 

设置用于舒适的未来工作的工具:

 image = Image.open('test.jpg') #   draw = ImageDraw.Draw(image) #     width = image.size[0] #   height = image.size[1] #   pix = image.load() #    

让我们开始吧


我们将以RGB格式处理图像。 PIL还支持使用格式1,L,P,RGB,RGBA,CMYK,YCbCr,LAB,HSV,I,F。

图像中的像素值以以下格式设置: (x,y),(red,green,blue) ,其中x,y是坐标,而RGB的数值在0到255的范围内。也就是说,我们处理8位图像。

灰阶


在所有调色板均等的情况下,将显示灰色调,因此我们需要获取所有三个点的算术平均值:

 for x in range(width): for y in range(height): r = pix[x, y][0] #     g = pix[x, y][1] # b = pix[x, y][2] # sr = (r + g + b) // 3 #  draw.point((x, y), (sr, sr, sr)) #  image.save("result.jpg", "JPEG") #    

图片
细微差别
人眼以不同的方式感知不同的颜色光谱。 没有人会给您确切的公式,因为每个人对颜色的认识都不同,但是如果您有兴趣,可以在这里这里阅读更多。


反演


反转是通过从255中减去当前颜色获得的:

 for x in range(width): for y in range(height): r = pix[x, y][0] g = pix[x, y][1] b = pix[x, y][2] draw.point((x, y), (255 - r, 255 - g, 255 - b)) 

图片

灰度反转


结合前面的两种算法,可以编写以下代码:

 for x in range(width): for y in range(height): r = pix[x, y][0] g = pix[x, y][1] b = pix[x, y][2] sr = (r + g + b) // 3 draw.point((x, y), (255 - sr, 255 - sr, 255 - sr)) 

图片

选择性灰度反转


对于此算法,您需要确定阈值,我将对它使用100:

 for x in range(width): for y in range(height): r = pix[x, y][0] g = pix[x, y][1] b = pix[x, y][2] if (r+g+b)>100: #    100 ,    sr = (r + g + b) // 3 draw.point((x, y), (255-sr, 255-sr, 255-sr)) else: #    sr = (r + g + b) // 3 draw.point((x, y), (sr, sr, sr)) 

图片

结论


在接下来的文章中,我想谈谈如何通过将其划分为多个区域来更局部地进行图像过滤,以及在图像处理算法中展示DFS的有趣可能性

Source: https://habr.com/ru/post/zh-CN451074/


All Articles