python图像处理基本操作总结(PIL库、Matplotlib及Numpy)


Posted in Python onJune 08, 2021

一、PIL库对图像的基本操作

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()

输出如下所示:

python图像处理基本操作总结(PIL库、Matplotlib及Numpy)

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)

输出结果如下所示:

python图像处理基本操作总结(PIL库、Matplotlib及Numpy)

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/"))

输出为文件名列表

二、Matplotlib

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 坐标上绘制出红色星状标记点,最后在两个列表表示的前两个点之间绘制一条线段。该例子的绘制结果下图:

python图像处理基本操作总结(PIL库、Matplotlib及Numpy)

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()

图像轮廓图输出如下所示:

python图像处理基本操作总结(PIL库、Matplotlib及Numpy)

输出图像直方图如下所示:

python图像处理基本操作总结(PIL库、Matplotlib及Numpy)

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()

三、Numpy

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()

输出接入如下所示:

python图像处理基本操作总结(PIL库、Matplotlib及Numpy)

总结

到此这篇关于python图像处理基本操作的文章就介绍到这了,更多相关python图像处理操作内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
讲解Python中的递归函数
Apr 27 Python
Python操作MongoDB数据库PyMongo库使用方法
Apr 27 Python
NumPy 如何生成多维数组的方法
Feb 05 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
Aug 04 Python
Python PyInstaller安装和使用教程详解
Jan 08 Python
Python处理PDF与CDF实例
Feb 26 Python
基于python图像处理API的使用示例
Apr 03 Python
python中JWT用户认证的实现
May 18 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
Jun 23 Python
Python logging日志库空间不足问题解决
Sep 14 Python
python中pandas.read_csv()函数的深入讲解
Mar 29 Python
python实现商品进销存管理系统
May 30 Python
Django drf请求模块源码解析
Python中OpenCV实现查找轮廓的实例
python字符串的多行输出的实例详解
Jun 08 #Python
Python机器学习之基于Pytorch实现猫狗分类
Python中json.load()和json.loads()有哪些区别
python 爬取哔哩哔哩up主信息和投稿视频
Jun 07 #Python
OpenCV-Python直方图均衡化实现图像去雾
You might like
星际中一些鲜为人知的详细资料
2020/03/04 星际争霸
历史证明,懒惰才是推动科学发展技术进步的动力
2021/03/02 无线电
基于PHP对XML的操作详解
2013/06/07 PHP
php检索或者复制远程文件的方法
2015/03/13 PHP
用htc组件制作windows选项卡
2007/01/13 Javascript
javascript OFFICE控件测试代码
2009/12/08 Javascript
网页前台通过js非法字符过滤代码(骂人的话等等)
2010/05/26 Javascript
js为鼠标添加右击事件防止默认的右击菜单弹出
2013/07/29 Javascript
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
2013/09/22 Javascript
Javascript表单验证要注意的事项
2014/09/29 Javascript
jQuery实现列表内容的动态载入特效
2015/08/08 Javascript
js中unicode转码方法详解
2015/10/09 Javascript
浅谈js多维数组和hash数组定义和使用
2016/07/27 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
ubuntu编译nodejs所需的软件并安装
2017/09/12 NodeJs
vue-cli + sass 的正确打开方式图文详解
2017/10/27 Javascript
微信小程序实现流程进度的图样式功能
2018/01/16 Javascript
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
2018/11/12 Javascript
微信小程序云开发详细教程
2019/05/16 Javascript
在layui tab控件中载入外部html页面的方法
2019/09/04 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
python django集成cas验证系统
2014/07/14 Python
Python基于pygame实现的font游戏字体(附源码)
2015/11/11 Python
教你用一行Python代码实现并行任务(附代码)
2018/02/02 Python
python实现抖音点赞功能
2019/04/07 Python
python使用matplotlib绘制折线图的示例代码
2020/09/22 Python
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
局部内部类是否可以访问非final变量?
2013/04/20 面试题
通用C#笔试题附答案
2016/11/26 面试题
商场开业庆典策划方案
2014/06/02 职场文书
小学综合实践活动总结
2014/07/07 职场文书
科学家研发出新型速效酶,可在 24 小时内降解塑料制品
2022/04/29 数码科技
在windows server 2012 r2中安装mysql的详细步骤
2022/07/23 Servers