当前位置:首页 > 云计算 > 正文内容

Python图像处理PIL库的操作总结

2022-05-04 03:04:08云计算1

Matlab确实是一个强大的图像处理工具,不过对于一些简单的图像处理,如图像增强、图像锐化等等,调用python的第三方包PIL(Python Image Library)也可以解决问题,这里把python调用PIL做一些简单的图像处理操作总结下。

主要用到PIL库里的三个模块:Image、ImageDraw、ImageEnhance。

1.调整图像大小

importImage
img=Image.open("1.jpg")
new_img=img.resize((128,128),Image.BILINEAR)
new_img.save("new_img.jpg")

将1.jpg的大小转为128*128,Image.BILINEAR 指定采用双线性法对像素点插值。

两幅图对比(左:原图 右:resize后)

2.旋转图像

importImage
img=Image.open("1.jpg")
rot_img=img.rotate(45)
rot_img.save("rot_img.jpg")

把图像旋转45度。

旋转45度

相关推荐:《Python入门教程》

3.格式转换

rot_img.save("con_img.bmp")

要把上面生成的 rot_img.jpg 转换成 bmp 图像,加这一行即可。如果不指定保存格式,PIL 将自动根据文件名后缀完成格式之间的转换。

4.统计直方图

importImage
img=Image.open("1.jpg")
new_img=img.resize((128,128),Image.BILINEAR)
rot_img=new_img.rotate(45)
print(rot_img.histogram())

Image 类实例的 histogram()方法能够对直方图数据进行统计,并将结果做为一个列表(list)返回,将打印出所有 256 个灰度级像素点个数的统计值:

[2812,7,18,18,16,25,18,22,27,41,24,34,24,22,23,20,33,32,22,20,22,21,21,24,21,27,3,8,19,
18,16,14,11,12,18,17,12,7,10,13,12,14,12,11,10,20,15,6,17,15,19,7,12,11,14,11,17,10,13,
8,9,10,9,10,12,8,10,12,16,7,15,6,6,15,8,11,9,10,8,11,6,8,12,7,10,16,16,7,13,5,15,15,
13,8,8,13,10,19,9,13,11,8,7,18,17,9,13,10,16,22,7,17,8,14,10,11,5,13,9,17,14,14,16,15,
8,22,10,16,13,12,6,5,15,9,14,9,12,8,11,9,8,7,9,16,12,9,7,14,7,6,11,16,18,10,3,16,10,
14,14,14,11,9,11,12,16,11,15,9,10,5,8,8,12,11,7,15,8,20,8,9,11,14,7,19,13,9,13,7,8,8,
16,20,2,16,6,13,8,11,14,14,9,14,8,14,15,14,8,14,25,14,16,21,12,10,12,17,21,15,12,34,16,
18,32,34,25,33,34,37,53,60,85,97,76,90,150,155,156,186,142,188,205,178,231,203,217,214,193,
342,218,218,272,439,935,429,2787,1935,2812,7,29,14,13,22,19,30,33,31,30,42,24,17,22,24,23,
37,18,19,21,30,20,22,14,20,4,10,23,16,18,7,14,15,15,17,12,6,23,11,4,11,13,15,15,14,17,
6,19,12,19,11,13,7,12,15,12,10,11,10,2,13,11,8,17,6,15,13,11,5,9,12,10,16,16,10,6,5,6,
8,11,7,14,18,11,11,15,2,10,7,16,9,11,20,4,11,12,22,4,15,8,12,9,10,12,12,14,15,15,19,
11,17,6,13,6,13,6,9,12,22,13,13,11,18,13,17,8,14,14,10,14,8,11,17,10,8,11,10,11,2,6,
15,4,11,17,13,12,10,3,7,17,10,12,9,11,13,11,15,14,5,8,14,8,18,15,10,8,13,16,5,10,9,10,
11,10,14,10,14,7,12,12,13,7,14,14,5,18,6,12,5,13,18,5,13,10,17,6,13,20,8,9,14,14,13,21,
11,12,17,14,12,8,15,13,15,12,14,19,18,17,19,27,18,23,31,27,16,27,30,28,34,37,45,40,46,
64,60,83,87,113,109,127,153,192,187,233,315,362,346,359,392,920,776,514,2183,2670,24,2812,1,
5,7,18,30,14,33,23,33,24,43,41,27,29,22,17,29,19,26,30,22,15,24,21,22,10,11,9,19,15,18,
11,16,14,11,15,7,16,7,20,11,17,10,12,16,10,9,18,12,14,13,11,12,13,13,14,16,5,13,5,7,10,
10,11,15,9,18,8,12,9,9,8,9,5,13,15,7,12,8,14,4,7,10,12,22,15,9,11,5,11,8,11,14,12,9,
11,19,12,20,8,4,16,12,8,15,12,13,12,16,22,11,13,10,15,14,12,12,13,8,13,16,9,14,18,14,
14,15,11,13,9,12,11,11,9,9,13,12,12,10,10,9,12,4,6,7,6,15,11,11,13,10,12,12,11,12,9,
15,13,9,16,9,12,14,13,9,14,13,7,7,14,7,13,6,17,9,13,10,8,13,13,6,19,9,14,9,14,10,7,9,
13,12,17,11,7,5,10,23,9,18,9,15,9,15,22,7,12,21,10,20,15,15,18,20,18,12,21,11,14,21,34,
22,42,44,63,48,55,56,62,87,91,106,115,164,174,183,144,159,144,156,172,190,164,177,258,229,
259,243,217,288,179,846,326,316,3907,941]

下面的操作加入 ImageDraw 模块,因为绘图操作是在图像上进行的,因此实例化 Draw 类的时候要把 Image对象 img 通过参数传递给 Draw 类的构造函数。

5.绘制直线

importImage,ImageDraw
img=Image.open("1.jpg")
draw=ImageDraw.Draw(img)
width,height=img.size#得到img的大小
draw.line(((0,0),(width-1,height-1)),fill=255)#对角线方向绘制直线
draw.line(((0,height-1),(width-1,0)),fill=255)
img.save("cross_line.jpg")

绘制对角线

6.绘制圆

importImage,ImageDraw
img=Image.open("1.jpg")
width,height=img.size
draw=ImageDraw.Draw(img)
draw.arc((0,0,width-1,height-1),0,360,fill=255)
img.save("circle.jpg")

(0,0,width-1,height-1)指定了所画弧线的界限;0,360 是所画弧线的起始角度和终止角度; fill=255 指定了所画线的颜色。

绘制圆

下面的操作加入ImageEnhance 模块,这个模块提供了一个常用的图像增强工具箱。可以用来进行色彩增强、亮度增强、对比度增强、图像尖锐化等等增强操作。所有操作都有相同形式的接口——通过相应类的 enhance 方法实现。

7.亮度增强

importImage,ImageEnhance
img=Image.open("1.jpg")
brightness=ImageEnhance.Brightness(img)
bright_img=brightness.enhance(2.0)
bright_img.save("bright.jpg")
brightness=ImageEnhance.Brightness(img)这一行把img传给Brightness类,得到一个Brightness类实例;
bright_img=brightness.enhance(2.0)这一行调用brightness实例的enhance方法,传入的参数指定将亮度增强2倍;

两幅图对比(左:原图 右:增强后)

8.图像锐化

importImage,ImageEnhance
img=Image.open("1.jpg")
sharpness=ImageEnhance.Sharpness(img)
sharp_img=sharpness.enhance(7.0)
sharp_img.save("sharp.jpg")

两幅图对比(左:原图 右:锐化后)

9.对比度增强

importImage,ImageEnhance
img=Image.open("1.jpg")
contrast=ImageEnhance.Contrast(img)
contrast_img=contrast.enhance(2.0)
contrast_img.save("contrast.jpg")

两幅图对比(左:原图 右:增强后)

本网站文章仅供交流学习 ,不作为商用, 版权归属原作者,部分文章推送时未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知,我们将立即删除.

本文链接:https://www.xibujisuan.cn/5373.html

标签: Python