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实现多线程抓取知乎用户
Dec 12 Python
Python 记录日志的灵活性和可配置性介绍
Feb 27 Python
python迭代dict的key和value的方法
Jul 06 Python
pytorch中tensor的合并与截取方法
Jul 26 Python
Flask核心机制之上下文源码剖析
Dec 25 Python
python paramiko利用sftp上传目录到远程的实例
Jan 03 Python
Python3实现定时任务的四种方式
Jun 03 Python
在Python中字符串、列表、元组、字典之间的相互转换
Nov 15 Python
python 创建一维的0向量实例
Dec 02 Python
Python chardet库识别编码原理解析
Feb 18 Python
详解pycharm配置python解释器的问题
Oct 15 Python
10个顶级Python实用库推荐
Mar 04 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定时执行任务设置详解
2015/02/06 PHP
PHP实现支持SSL连接的SMTP邮件发送类
2015/03/05 PHP
Discuz论坛密码与密保加密规则
2016/12/19 PHP
php+ajax实现异步上传文件或图片功能
2017/07/18 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
2013/04/08 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
2015/09/04 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
2015/10/01 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
js中使用使用原型(prototype)定义方法的好处详解
2016/07/04 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
ThinkJS中如何使用MongoDB的CURD操作
2016/12/13 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
[01:46]TI4西雅图DOTA2前线报道 中国选手抱团调时差
2014/07/08 DOTA
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
详解爬虫被封的问题
2019/04/23 Python
python银行系统实现源码
2019/10/25 Python
详解python statistics模块及函数用法
2019/10/27 Python
python argparser的具体使用
2019/11/10 Python
Python 如何操作 SQLite 数据库
2020/08/17 Python
Jmeter调用Python脚本实现参数互相传递的实现
2021/01/22 Python
python re.match()用法相关示例
2021/01/27 Python
解析HTML5中的新功能本地存储localStorage
2016/03/01 HTML / CSS
Otticanet澳大利亚:最顶尖的世界名牌眼镜, 能得到打折季的价格
2018/08/23 全球购物
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
冰淇淋开店创业计划书
2014/02/01 职场文书
个人融资协议书
2014/10/02 职场文书
成本会计实训报告
2014/11/05 职场文书
2014年协会工作总结
2014/11/22 职场文书
拾金不昧通报表扬范文
2015/05/05 职场文书