python读取和保存图片5种方法对比


Posted in Python onSeptember 12, 2018

python读取和保存图片5种方法对比

python中对象之间的赋值是按引用传递的,如果需要拷贝对象,需要用到标准库中的copy模块

方法一:利用 PIL 中的 Image 函数

这个函数读取出来不是 array 格式,这时候需要用 np.asarray(im) 或者 np.array()函数 。

区别:np.array() 是深拷贝,np.asarray() 是浅拷贝

copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。

copy.deepcopy 深拷贝 拷贝对象及其子对象

例子:

import copy 
a = [1, 2, 3, 4, ['a', 'b']] #原始对象 
b = a #赋值,传对象的引用 
c = copy.copy(a) #对象拷贝,浅拷贝 
d = copy.deepcopy(a) #对象拷贝,深拷贝 
a.append(5) #修改对象a 
a[4].append('c') #修改对象a中的['a', 'b']数组对象 
print 'a = ', a 
print 'b = ', b 
print 'c = ', c 
print 'd = ', d

输出结果:

a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
d = [1, 2, 3, 4, ['a', 'b']]

需要好好理解一下深拷贝和浅拷贝

from PIL import Image 
import numpy as np 
I = Image.open('./cc_1.png') 
I.show() 
I.save('./save.png') 
I_array = np.array(I) 
print I_array.shape

方法二:利用 matplotlib

利用 matplotlib.pyplot as plt 用于显示图片

matplotlib.image as mpimg 用于读取图片

并且读取出来就是 array 格式

import matplotlib.pyplot as plt 
import matplotlib.image as mpimg 
import numpy as np 
I = mpimg.imread('./cc_1.png') 
print I.shape 
plt.imshow(I)

方法三:利用 OpenCV-Python 接口

cv2.imread() 读出来同样是 array 形式,但是如果是单通道的图,读出来的是三通道的。

import cv2 
I = cv2.imread('./cc_1.png') 
print I.shape

方法四:图像处理库 Scipy

图像的存取笔者一般喜欢用 scipy 这个库里的东西

读出来是 array 形式,并且按照(H,W,C)形式保存

import matplotlib.pyplot as plt 
from scipy import misc 
import scipy 
I = misc.imread('./cc_1.png') 
scipy.misc.imsave('./save1.png', I) 
plt.imshow(I) 
plt.show()

方法五:用 skimage 库

from skimage import io,data
img=data.lena()
io.imshow(img)

关于存储方式主要用两种:

当对象是图片时,使用 object.save(path)函数

当对象时二维数组时,使用 misc.imsave(path,object)函数

python读取图片的5种方法使用非常简单,大家可以在自己机器上测试一下

Python 相关文章推荐
Python中条件选择和循环语句使用方法介绍
Mar 13 Python
实例讲解Python中的私有属性
Aug 21 Python
Python中的面向对象编程详解(上)
Apr 13 Python
python从入门到精通(DAY 1)
Dec 20 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
Sep 18 Python
python3利用smtplib通过qq邮箱发送邮件方法示例
Dec 03 Python
Python迭代器和生成器定义与用法示例
Feb 10 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
Jan 19 Python
python 去除二维数组/二维列表中的重复行方法
Jan 23 Python
python-itchat 统计微信群、好友数量,及原始消息数据的实例
Feb 21 Python
Python 发送邮件方法总结
Aug 10 Python
拿来就用!Python批量合并PDF的示例代码
Aug 10 Python
python3 拼接字符串的7种方法
Sep 12 #Python
python简单操作excle的方法
Sep 12 #Python
使用python实现快速搭建简易的FTP服务器
Sep 12 #Python
python ftp 按目录结构上传下载的实现代码
Sep 12 #Python
python3结合openpyxl库实现excel操作的实例代码
Sep 11 #Python
python创建文件备份的脚本
Sep 11 #Python
python实现飞机大战
Sep 11 #Python
You might like
福利彩票幸运号码自动生成器
2006/10/09 PHP
PHP之短标签开启设置
2013/06/17 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
一个简单的php路由类
2016/05/29 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
使用jQuery将多条数据插入模态框的实现代码
2014/10/08 Javascript
分享十五款 jQuery 社交网络分享插件
2015/05/16 Javascript
Javascript的表单验证-提交表单
2016/03/18 Javascript
jquery心形点赞关注效果的简单实现
2016/11/14 Javascript
详解JavaScript的内置对象
2016/12/07 Javascript
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
vue中axios的封装问题(简易版拦截,get,post)
2018/06/15 Javascript
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
js实现电灯开关效果
2021/01/19 Javascript
Nest.js散列与加密实例详解
2021/02/24 Javascript
Python实现采用进度条实时显示处理进度的方法
2017/12/19 Python
python实现超简单的视频对象提取功能
2018/06/04 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
2018/11/29 Python
python 读取文件并把矩阵转成numpy的两种方法
2019/02/12 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
原生python实现knn分类算法
2019/10/24 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
15个Pythonic的代码示例(值得收藏)
2020/10/29 Python
详解CSS的border边框属性及其在CSS3中的新特性
2016/05/10 HTML / CSS
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
革命先烈的英雄事迹材料
2014/02/15 职场文书
公务员平时考核实施方案
2014/03/11 职场文书
幼儿园老师个人总结
2015/02/28 职场文书
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android