python学习-图片处理小程序(PIL的安装、PIL.Image的使用、 示例程序(图片灰度值修改))
程序员文章站
2022-05-31 23:08:34
...
PIL的安装
首先,win + R,打开命令运行窗口,然后输入cmd命令。
然后在命令行中,切换到python的安装目录下:
然后输入pip,在python3中pip模块已内置,所以不需要安装pip。
接着键入pip install Pillow 提示安装成功(successful)即安装完成
这时候引入PIL模块,则不会报错了。
示例程序
说明:
两种方式引入image
from PIL import Image, ImageFilter, ImageOps
import PIL.Image
因为好多模块都包含Image,所以,尽量使用第二种方式,即 import PIL.Image 。
如果引入模块多了,会冲突。而且尽量不要使用这种方式引入:from PIL import *
尽量使用什么模块,则引入什么模块。不然冲突了定位问题还是挺麻烦的。
还有一点比较奇葩的地方,如果是从图片的属性中拷贝的文件路径:
同样是这一句代码:
img = PIL.Image.open("G:\\life\\pic\\fxq.jpg")
会报错:
是因为在G前面还有其他符号
这种情况,把G删除,然后重新输入就好了。因为路径被添加了其他符号,导致查找不到。
下面上代码:
from PIL import ImageFilter, ImageOps
import PIL.Image
img = PIL.Image.open("G:\\life\\pic\\fxq.jpg")
def dodge(a, b, alpha):
return min(int(a * 255 / (256 - b * alpha)), 255)
def draw(img, blur=25, alpha=1.0):
img1 = img.convert('L')
img2 = img1.copy()
img2 = ImageOps.invert(img2)
for i in range(blur):
img2 = img2.filter(ImageFilter.BLUR)
width, height = img1.size
for x in range(width):
for y in range(height):
a = img1.getpixel((x, y))
b = img2.getpixel((x, y))
img1.putpixel((x, y), dodge(a, b, alpha))
img1.show()
img1.save("G:\\life\\pic\\fxq1.jpg")
draw(img)
通过这段代码,可以把图片改成类似素描的效果。
原图和处理后图片的对比:
大家可以不使用风景图片,使用人像图片,可以轻松把照片转成素描图片。
当然有个问题就是putpixel函数的效率很低,不建议大家使用比较大的图片进行处理,我开始使用了一张16M的图片,等了一分钟。后面换成这个示例图片,就可以秒处理了。
附上原图: