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设计模式之观察者模式简单示例
Jan 10 Python
shell命令行,一键创建 python 模板文件脚本方法
Mar 20 Python
Python----数据预处理代码实例
Mar 20 Python
python3图片文件批量重命名处理
Oct 31 Python
python绘制随机网络图形示例
Nov 21 Python
Python实现分数序列求和
Feb 25 Python
python数据类型可变不可变知识点总结
Mar 06 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
Mar 12 Python
PYcharm 激活方法(推荐)
Mar 23 Python
Python本地及虚拟解释器配置过程解析
Oct 13 Python
基于Python的接口自动化读写excel文件的方法
Jan 15 Python
flask框架中的cookie和session使用
Jan 31 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
解析PHP中的正则表达式以及模式匹配
2013/06/19 PHP
分享最受欢迎的5款PHP框架
2014/11/27 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
js常用系统函数用法实例分析
2015/01/12 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
AngularJS使用指令增强标准表单元素功能
2016/07/01 Javascript
Angularjs的ng-repeat中去除重复数据的方法
2016/08/05 Javascript
前端程序员必须知道的高性能Javascript知识
2016/08/24 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
vue获取dom元素注意事项
2017/12/28 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
PM2自动部署代码步骤流程总结
2018/12/10 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
2019/05/16 Javascript
Vue循环遍历选项赋值到对应控件的实现方法
2020/06/22 Javascript
py中的目录与文件判别代码
2008/07/16 Python
Python学习之asyncore模块用法实例教程
2014/09/29 Python
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
浅谈Python生成器generator之next和send的运行流程(详解)
2017/05/08 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
Selenium控制浏览器常见操作示例
2018/08/13 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
python爬虫之爬取百度音乐的实现方法
2019/08/24 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
Python实现石头剪刀布游戏
2021/01/20 Python
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
Happy Plugs官网:瑞典无线耳机品牌
2020/07/16 全球购物
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android
一文带你探究MySQL中的NULL
2021/11/11 MySQL
html中两种获取标签内的值的方法
2022/06/16 jQuery