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的加密模块md5、sha、crypt使用实例
Sep 28 Python
Mac下Supervisor进程监控管理工具的安装与配置
Dec 16 Python
python基础教程之分支、循环简单用法
Jun 16 Python
Python实现的计算器功能示例
Apr 26 Python
Numpy array数据的增、删、改、查实例
Jun 04 Python
Numpy 将二维图像矩阵转换为一维向量的方法
Jun 05 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
Oct 21 Python
详解python中@的用法
Mar 27 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
Apr 11 Python
python 通过视频url获取视频的宽高方式
Dec 10 Python
浅谈python量化 双均线策略(金叉死叉)
Jun 03 Python
flask项目集成swagger的方法
Dec 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 文件上传模型,支持多文件上传
2009/08/13 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
php cookie用户登录的详解及实例代码
2017/01/03 PHP
Laravel实现ApiToken认证请求
2019/10/14 PHP
javaScript call 函数的用法说明
2010/04/09 Javascript
基于jquery的$.ajax async使用
2011/10/19 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
2015/12/03 Javascript
WEB前端实现裁剪上传图片功能
2016/10/17 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
基于JavaScript实现带缩略图的轮播效果
2017/01/12 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
jquery实现侧边栏左右伸缩效果的示例
2017/12/19 jQuery
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
vue 实现类似淘宝星级评分的示例
2018/03/01 Javascript
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
python Matplotlib画图之调整字体大小的示例
2017/11/20 Python
python脚本生成caffe train_list.txt的方法
2018/04/27 Python
Python中函数参数调用方式分析
2018/08/09 Python
Python2和Python3中urllib库中urlencode的使用注意事项
2018/11/26 Python
Python装饰器使用你可能不知道的几种姿势
2019/10/25 Python
opencv3/C++实现视频背景去除建模(BSM)
2019/12/11 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
Python绘制数码晶体管日期
2021/02/19 Python
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书
入党积极分子半年考察意见
2015/06/02 职场文书
考生诚信考试承诺书(2016版)
2016/03/25 职场文书
MySQL 数据恢复的多种方法汇总
2021/06/21 MySQL
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python