Python中怎么用PIL库对于图像进行读取、格式转换处理
Admin 2022-07-05 群英技术资讯 498 次浏览
1、读取图片
PIL网上有很多介绍,这里不再讲解。直接操作,读取一张图片,将其转换为灰度图像,并打印出来。
from PIL import Image import matplotlib.pyplot as plt pil_im = Image.open("empire.jpeg") pil_image = pil_im.convert("L") plt.gray() plt.imshow(pil_image) plt.show()
输出如下所示:
2、转换图片格式
PIL可以将图像保存为多种格式,下面将PNG格式文件保存为JPG格式:
from PIL import Image import glob import os filelist = glob.glob("E:/pythonProject1/filelist/*.png") for infile in filelist: outfile = os.path.splitext(infile)[0]+'.jpg' if infile != outfile: try: Image.open(infile).save(outfile) except IOError: print("cannot convert", infile)
输出结果如下所示:
3、输出文件夹中所有图片的文件名列表
import os def get_imlist(path): """返回目录中所有JPG图像的文件名列表""" return [os.path.join(path,f)for f in os.listdir(path) if f.endswith('.jpg')] print(get_imlist("E:/pythonProject1/filelist/"))
输出为文件名列表
1、绘制图像、点和线
from PIL import Image from pylab import * #读取图像到数组中 im = array(Image.open("empire.jpeg")) #绘制图像 imshow(im) #一些点 x = [100, 100, 400, 400] y = [200, 500, 200, 500] #使用红色星状标记绘制点 plot(x, y)#默认为蓝色实线 # plot(x, y, 'r*')#红色星状标记 # plot(x, y, 'go-')#带有圆圈标记的绿线 # plot(x, y, 'ks')#带有正方形标记的黑色虚线 #绘制连接前三个点的线 plot(x[:3], y[:3]) axis('off') #添加标题,显示绘制的图像 titles = ['empire'] plt.title = titles show()
上面的代码首先绘制出原始图像,然后在 x 和 y 列表中给定点的 x 坐标和 y 坐标上绘制出红色星状标记点,最后在两个列表表示的前两个点之间绘制一条线段。该例子的绘制结果下图:
2、图像轮廓和直方图
绘制轮廓需要对每个坐标 [x, y] 的像素值施加同一个阈值,所以首先需要将图像灰度化,这里用 PIL 的 convert()
方法将图像转换成灰度图像。图像的直方图用来表征该图像像素值的分布情况。
from PIL import Image from pylab import * # 读取图像到数组中 im = array(Image.open("empire.jpeg").convert('L')) #创建一个图像 figure() #不使用颜色信息 gray() #在原点的左上角显示轮廓图像 contour(im, origin = 'image')#检测图像轮廓 axis('equal') axis('off') show() #新建一个图像 figure hist(im.flatten(), 128)#绘制图像直方图 show()
图像轮廓图输出如下所示:
输出图像直方图如下所示:
3、交互式标注
在一幅图像中标记一些点,或者标注一些训练数据。PyLab
库中的 ginput()
函数就可以实现交互式标注。在图像点击三次,则程序会自动将这3个点的坐标点[x, y]保存到x列表里。
from PIL import Image from pylab import * im = array(Image.open("empire.jpeg")) imshow(im) print("please click 3 points") x = ginput(3) print("you clicked",x) show()
1、图像数组表示
对于图像数据,下面的例子阐述了这一点
from PIL import Image import numpy as np im = np.array(Image.open("empire.jpeg")) print(im.shape,im.dtype)
输出为:
(1024, 683, 3) uint8
每行的第一个元组表示图像数组的大小(行、列、颜色通道),紧接着的字符串表示数组元素的数据类型。因为图像通常被编码成无符号八位整数(uint8),载入图像并将其转换到数组中,数组的数据类型为“uint8”。
2、灰度变换
对图像进行灰度变换,如下所示:
from PIL import Image import numpy as np im = np.array(Image.open("empire.jpeg")) print(im.shape,im.dtype) from PIL import Image from matplotlib.pylab import plt from numpy import * im1 = array(Image.open('empire.jpeg').convert('L')) im2 = 255 - im1 #对图像进行反向处理 im3 = (100.0/255) * im1 + 100 #将图像值变换到100-200之间 im4 = 255.0 * (im1/255) ** 2 #对图像像素值求平方后得到的图像 images = [im1, im2, im3, im4] titles = ["f(x) = x", "f(x) = 255 - x", "f(x) = (100/255)*x +100", "f(x) = 255*(x/255)^2"] #输出图中的最大像素值和最小像素值 print(int(im1.min()),int(im1.max())) print(int(im2.min()),int(im2.max())) print(int(im3.min()),int(im3.max())) print(int(im4.min()),int(im4.max())) for i in range(4): plt.subplot(2, 2, i+1)#2行2列,按编号顺序排列 plt.imshow(images[i])#显示图像 plt.title(titles[i])#显示标题 plt.gray() # plt.xticks([]) # plt.yticks([]) plt.axis('equal') plt.axis('off') plt.show()
输出接入如下所示:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了python数据结构算法分析,在python的数据结构的章节中,我们上次学习到了python面向对象的思想,即我们想用程序来实现一个东西,我们需是用对象的特征来描述我们想构建的对象。感兴趣的小伙伴可以查看下面内容</P><P>
Matplotlib是Python中众多数据可视化库的鼻祖,其设计风格与20世纪80年代设计的商业化程序语言MATLAB十分接近,具有很多强大且复杂的可视化功能。Matplotlib包含多种类型的API,可以采用多种方式绘制图表并对图表进行定制。
这篇文章主要介绍了python 中[0]*2与0*2的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
这篇文章主要介绍了python 中raise用法,Python 允许我们在程序中手动设置异常,就是使用raise 语句来实现,下面我们就来看看raise的具体用法,文章内容介绍详细,具有一定的参考价值,需要的小伙伴可以参考一下
numpy是Python语言的一个扩充程序库,可以支持高级大量的维度数组与矩阵运算。本文给大家介绍的就是关于numpy库的基本使用,具有一定的参考学习价值,下面跟随小编一起来了解一下numpy库的使用吧。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008