Python生态圈图像格式转换问题(推荐)


Posted in Python onDecember 02, 2019

在Python生态圈里,最常用的图像库是PIL——尽管已经被后来的pillow取代,但因为pillow的API几乎完全继承了PIL,所以大家还是约定俗成地称其为PIL。除PIL之外,越来越多的程序员习惯使用openCV来处理图像。另外,在GUI库中,也有各自定义的图像处理机制,比如wxPyton,定义了wx.Image做为图像处理类,定义了wx.Bitmap做为图像显示类。

下图梳理出了PIL读写图像文件、cv2读写图像文件、PIL对象和cv2对象互转、PIL对象和wx.Image对象互转、以及numpy数组转存图像的方法。掌握了这些方法,足可应对各种各样的图像处理需求了。

Python生态圈图像格式转换问题(推荐)

1. PIL读写图像文件

下面的代码,演示了用PIL读取png格式的图像文件,剔除alpha通道后转存为jpg格式的图像文件。

>>> from PIL import Image
>>> im = Image.open(r'D:\CSDN\Python_Programming.png')
>>> r,g,b,a = im.split()
>>> im = Image.merge("RGB",(r,g,b))
>>> im.save(r'D:\CSDN\Python_Programming.jpg')

2. cv2读写图像文件

下面的代码,演示了用cv2读取png格式的图像文件,转存为jpg格式的图像文件。

>>> import cv2
>>> im = cv2.imread(r'D:\CSDN\Python_Programming.png')
>>> cv2.imwrite(r'D:\CSDN\Python_Programming.jpg', im)
True

3. PIL对象和cv2对象互转

cv2格式的对象,本质上就是numpy数组,也就是numpy.ndarray对象。只要能做到PIL对象和numpy数组互转,自然就实现了PIL对象和cv2对象互转。

下面的代码,演示了用PIL读取png格式的图像文件,转成numpy数组后保存为图像文件。

>>> import cv2
>>> from PIL import Image
>>> import numpy as np
>>> im_pil = Image.open(r'D:\CSDN\Python_Programming.png')
>>> im_cv2 = np.array(im_pil)
>>> cv2.imwrite(r'D:\CSDN\Python_Programming.jpg', im_cv2)
True

下面的代码,用cv2读取png格式的图像文件,转成PIL对象后保存为图像文件。

>>> import cv2
>>> from PIL import Image
>>> im_cv2 = cv2.imread(r'D:\CSDN\Python_Programming.png')
>>> im_pil = Image.fromarray(im_cv2)
>>> im_pil.save(r'D:\CSDN\Python_Programming.jpg')

4. PIL对象和wx.Image对象互转

这是实现PIL对象和wx.Image对象互转的两个函数。

def PilImg2WxImg(pilImg):
  '''PIL的image转化为wxImage'''
  image = wx.EmptyImage(pilImg.size[0],pilImg.size[1])
  image.SetData(pilImg.convert("RGB").tostring())
  image.SetAlphaData(pilImg.convert("RGBA").tostring()[3::4])
  return image
def WxImg2PilImg(wxImg):
  '''wxImage转化为PIL的image'''
  pilImage = Image.new('RGB', (wxImg.GetWidth(), wxImg.GetHeight()))
  pilImage.fromstring(wxImg.GetData())
  if wxImg.HasAlpha():
    pilImage.convert( 'RGBA' )
    wxAlphaStr = wxImg.GetAlphaData()
    pilAlphaImage = Image.fromstring( 'L', (wxImg.GetWidth(), wxImg.GetHeight()), wxAlphaStr )
    pilImage.putalpha( pilAlphaImage )
  return pilImage

5. numpy数组转存图像

下面的代码,生成了一张515x512像素的随机图像。

>>> from PIL import Image
>>> import numpy as np
>>> a = np.random.randint(0,256,((512,512,3)), dtype=np.uint8)
>>> im_pil = Image.fromarray(a)
>>> im_pil.save(r'D:\CSDN\random.jpg')

Python生态圈图像格式转换问题(推荐)

总结

以上所述是小编给大家介绍的Python生态圈图像格式转换问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python def函数的定义、使用及参数传递实现代码
Aug 10 Python
Tornado服务器中绑定域名、虚拟主机的方法
Aug 22 Python
整理Python 常用string函数(收藏)
May 30 Python
在Python web中实现验证码图片代码分享
Nov 09 Python
Python迭代器和生成器定义与用法示例
Feb 10 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
May 02 Python
如何运行带参数的python脚本
Nov 15 Python
Python Print实现在输出中插入变量的例子
Dec 25 Python
python with (as)语句实例详解
Feb 04 Python
Python DES加密实现原理及实例解析
Jul 17 Python
python 实现压缩和解压缩的示例
Sep 22 Python
对象析构函数__del__在Python中何时使用
Mar 22 Python
python 申请内存空间,用于创建多维数组的实例
Dec 02 #Python
python将数组n等分的实例
Dec 02 #Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
Dec 02 #Python
Python中类似于jquery的pyquery库用法分析
Dec 02 #Python
python 检查数据中是否有缺失值,删除缺失值的方式
Dec 02 #Python
python实现两个字典合并,两个list合并
Dec 02 #Python
Python:合并两个numpy矩阵的实现
Dec 02 #Python
You might like
round robin权重轮循算法php实现代码
2016/05/28 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
laravel 错误处理,接口错误返回json代码
2019/10/25 PHP
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
2010/03/18 Javascript
js 回车提交表单两种实现方法
2012/12/31 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
微信小程序wx:for和wx:for-item的用法详解
2018/04/01 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
matplotlib绘制符合论文要求的图片实例(必看篇)
2017/06/02 Python
Python实现的递归神经网络简单示例
2017/08/11 Python
Python实现输出某区间范围内全部素数的方法
2018/05/02 Python
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
python保存数据到本地文件的方法
2018/06/23 Python
用Python分析3天破10亿的《我不是药神》到底神在哪?
2018/07/12 Python
浅析PyTorch中nn.Linear的使用
2019/08/18 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
2020/03/06 Python
IE9下html5初试小刀
2010/09/21 HTML / CSS
德国大型箱包和皮具商店:Koffer
2019/10/01 全球购物
六十大寿答谢词
2014/01/12 职场文书
路政管理毕业自荐书范文
2014/02/10 职场文书
小学安全工作汇报材料
2014/08/19 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
小班下学期个人总结
2015/02/12 职场文书
调任通知
2015/04/21 职场文书
原告离婚代理词
2015/05/23 职场文书
2019年教师入党申请书
2019/06/27 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python
python字符串的多行输出的实例详解
2021/06/08 Python
MySQL 十大常用字符串函数详解
2021/06/30 MySQL