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爬虫之神器正则表达式
Nov 06 Python
Python中的引用和拷贝浅析
Nov 22 Python
python简单实现获取当前时间
Aug 27 Python
Python编程pygame模块实现移动的小车示例代码
Jan 03 Python
Python学习笔记之pandas索引列、过滤、分组、求和功能示例
Jun 03 Python
Python GUI编程 文本弹窗的实例
Jun 11 Python
python实现通过flask和前端进行数据收发
Aug 22 Python
Python实现图片识别加翻译功能
Dec 26 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
May 25 Python
python调用摄像头的示例代码
Sep 28 Python
python实战之一步一步教你绘制小猪佩奇
Apr 22 Python
Python实现天气查询软件
Jun 07 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
PHP函数常用用法小结
2010/02/08 PHP
php不用内置函数对数组排序的两个算法代码
2010/02/08 PHP
PHP 遍历文件实现代码
2011/05/04 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
PHP实现大数(浮点数)取余的方法
2017/02/18 PHP
laravel5环境隐藏index.php后缀(apache)的方法
2019/10/12 PHP
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
JS实现可调整倒计时间代码分享
2015/08/18 Javascript
Bootstrap项目实战之子栏目资讯内容
2016/04/25 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
jQuery侧边栏实现代码
2016/05/06 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
AngularJS删除路由中的#符号的方法
2016/09/20 Javascript
JS实现的走迷宫小游戏完整实例
2017/07/19 Javascript
vue下跨域设置的相关介绍
2017/08/26 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
Vue.js 点击按钮显示/隐藏内容的实例代码
2018/02/08 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
详解微信小程序的不同函数调用的几种方法
2019/05/08 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
vue离开当前页面触发的函数代码
2020/09/01 Javascript
[48:24]完美世界DOTA2联赛循环赛LBZS vs Forest 第一场 10月30日
2020/10/31 DOTA
Python输出9*9乘法表的方法
2015/05/25 Python
python 解决tqdm模块不能单行显示的问题
2020/02/19 Python
接口自动化多层嵌套json数据处理代码实例
2020/11/20 Python
广告语设计及教案
2014/03/21 职场文书
难忘的一天教学反思
2014/04/30 职场文书
社区反邪教工作方案
2014/06/16 职场文书
工商管理本科生求职信
2014/07/13 职场文书
2015年检察院个人工作总结
2015/05/20 职场文书
环保建议书作文400字
2015/09/14 职场文书
2016年七夕爱情寄语
2015/12/04 职场文书
2016年校园重阳节广播稿
2015/12/18 职场文书
Pyqt5将多个类组合在一个界面显示的完整示例
2021/09/04 Python
MySQL8.0 Undo Tablespace管理详解
2022/06/16 MySQL