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 相关文章推荐
Python3控制路由器——使用requests重启极路由.py
May 11 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
Aug 07 Python
浅析Python函数式编程
Oct 06 Python
python中退出多层循环的方法
Nov 27 Python
python根据文章标题内容自动生成摘要的实例
Feb 21 Python
python 画二维、三维点之间的线段实现方法
Jul 07 Python
Pytorch Tensor的索引与切片例子
Aug 18 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
Sep 24 Python
基于Python数据分析之pandas统计分析
Mar 03 Python
python 成功引入包但无法正常调用的解决
Mar 09 Python
VScode连接远程服务器上的jupyter notebook的实现
Apr 23 Python
Python+Tkinter制作专属图形化界面
Apr 01 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
PHPThumb PHP 图片缩略图库
2012/03/11 PHP
解析PHP工厂模式的好处
2013/06/18 PHP
php实现的微信红包算法分析(非官方)
2015/09/25 PHP
PHP多进程简单实例小结
2019/11/09 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
Javascript 面向对象(三)接口代码
2012/05/23 Javascript
基于jquery打造的百分比动态色彩条插件
2012/09/19 Javascript
两个listbox实现选项的添加删除和搜索
2013/03/01 Javascript
Textarea根据内容自适应高度
2013/10/28 Javascript
使用jQuery实现的掷色子游戏动画效果
2014/03/14 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
JavaScript使用addEventListener添加事件监听用法实例
2015/06/01 Javascript
JavaScript调用客户端Java程序的方法
2015/07/27 Javascript
文字垂直滚动之javascript代码
2015/07/29 Javascript
node.js入门实例helloworld详解
2015/12/23 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
jQuery实现的放大镜效果示例
2016/09/13 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
2016/09/15 Javascript
Vue之Watcher源码解析(1)
2017/07/19 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
ionic+html5+API实现双击返回键退出应用
2019/09/17 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
2020/11/18 Vue.js
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
哪种Python框架适合你?简单介绍几种主流Python框架
2020/08/04 Python
J2EE中常用的名词进行解释
2015/11/09 面试题
4s客服专员岗位职责
2013/12/01 职场文书
英语故事演讲稿
2014/04/29 职场文书
购房公证委托书(2014版)
2014/09/12 职场文书
个人汇报材料范文
2014/12/30 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
XX部保密工作制度范本
2019/08/27 职场文书