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万年历实现代码 含运行结果
May 20 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
Jul 06 Python
利用python为运维人员写一个监控脚本
Mar 25 Python
python中不能连接超时的问题及解决方法
Jun 10 Python
python使用PIL给图片添加文字生成海报示例
Aug 17 Python
pytorch对可变长度序列的处理方法详解
Dec 08 Python
python判断所输入的任意一个正整数是否为素数的两种方法
Jun 27 Python
基于numpy中的expand_dims函数用法
Dec 18 Python
python re模块匹配贪婪和非贪婪模式详解
Feb 11 Python
Python调用C/C++的方法解析
Aug 05 Python
Python趣味入门教程之循环语句while
Aug 26 Python
Python特殊属性property原理及使用方法解析
Oct 09 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经典算法集锦【经典收藏】
2016/09/14 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
Jquery中dialog属性小记
2010/09/03 Javascript
jQuery EasyUI API 中文文档 搜索框
2011/09/29 Javascript
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
了解Javascript的模块化开发
2015/03/02 Javascript
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
jQuery实现鼠标点击弹出渐变层的方法
2015/07/09 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
2016/02/21 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
2016/05/18 Javascript
bootstrap导航、选项卡实现代码
2016/12/28 Javascript
Node.js使用NodeMailer发送邮件实例代码
2017/03/06 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
微信小程序云开发之使用云数据库
2019/05/17 Javascript
vue中的过滤器实例代码详解
2019/06/06 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
jQuery实现轮播图效果demo
2020/01/11 jQuery
[01:32]DOTA2 2015国际邀请赛中国区预选赛第四日战报
2015/05/29 DOTA
python使用xlrd与xlwt对excel的读写和格式设定
2017/01/21 Python
Python简单定义与使用字典dict的方法示例
2017/07/25 Python
Python实现字符串匹配的KMP算法
2019/04/04 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
2019/10/28 Python
pymysql 插入数据 转义处理方式
2020/03/02 Python
Python xlrd excel文件操作代码实例
2020/03/10 Python
Watchshop德国:欧洲在线手表No.1
2019/06/20 全球购物
春季运动会广播稿大全
2014/02/19 职场文书
商超业务员岗位职责
2014/03/12 职场文书
财务部副经理岗位职责
2014/03/14 职场文书
四风对照检查材料范文
2014/09/27 职场文书
大学生自荐书范文
2015/03/05 职场文书
就业导师推荐信范文
2015/03/27 职场文书
CSS中em的正确打开方式详解
2021/04/08 HTML / CSS
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
2022/02/12 Redis