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脚本
Feb 10 Python
python实现web方式logview的方法
Aug 10 Python
Python网站验证码识别
Jan 25 Python
python下os模块强大的重命名方法renames详解
Mar 07 Python
用python写个自动SSH登录远程服务器的小工具(实例)
Jun 17 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
Oct 20 Python
Python爬虫常用库的安装及其环境配置
Sep 19 Python
python实现图片插入文字
Nov 26 Python
Python尾递归优化实现代码及原理详解
Oct 09 Python
Django集成MongoDB实现过程解析
Dec 01 Python
python实现经纬度采样的示例代码
Dec 10 Python
Python中的流程控制详解
Feb 18 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
php 数组二分法查找函数代码
2010/02/16 PHP
PHP计算日期相差天数实例分析
2016/02/23 PHP
php版微信自定义回复功能示例
2016/12/05 PHP
解决Laravel无法使用COOKIE和SESSION的问题
2019/10/16 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
js函数般调用正则
2008/04/08 Javascript
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
2009/11/24 Javascript
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
调整小数的格式保留小数点后两位
2014/05/14 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
JavaScript给url网址进行encode编码的方法
2015/03/18 Javascript
jQuery插件pagination实现分页特效
2015/04/12 Javascript
JavaScript实现获取某个元素相邻兄弟节点的prev与next方法
2016/01/25 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
jQuery简单实现title提示效果示例
2016/08/01 Javascript
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
2017/08/15 Javascript
解决Angularjs异步操作后台请求用$q.all排列先后顺序问题
2019/11/29 Javascript
Node.JS获取GET,POST数据之queryString模块使用方法详解
2020/02/06 Javascript
Js跳出两级循环方法代码实例
2020/09/22 Javascript
[46:23]完美世界DOTA2联赛PWL S2 FTD vs Magma 第一场 11.20
2020/11/23 DOTA
Windows系统下多版本pip的共存问题详解
2017/10/10 Python
python日期相关操作实例小结
2019/06/24 Python
12个步骤教你理解Python装饰器
2019/07/01 Python
Python3安装psycopy2以及遇到问题解决方法
2019/07/03 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
使用TFRecord存取多个数据案例
2020/02/17 Python
谈谈python垃圾回收机制
2020/09/27 Python
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
医学院学生的自我评价分享
2013/11/19 职场文书
给客户的道歉信
2014/01/13 职场文书
股东出资证明书(正规版)
2014/09/24 职场文书
2014年银行柜员工作总结
2014/11/12 职场文书
领导新年致辞2016
2015/07/29 职场文书
Python django中如何使用restful框架
2021/06/23 Python