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之从if开始语句的征程
Sep 14 Python
python安装以及IDE的配置教程
Apr 29 Python
Python提取Linux内核源代码的目录结构实现方法
Jun 24 Python
详解 Python 读写XML文件的实例
Aug 02 Python
python实现微信接口(itchat)详细介绍
Oct 23 Python
Python FTP两个文件夹间的同步实例代码
May 25 Python
使用python实现简单五子棋游戏
Jun 18 Python
使用python快速实现不同机器间文件夹共享方式
Dec 22 Python
基于spring boot 日志(logback)报错的解决方式
Feb 20 Python
Python flask路由间传递变量实例详解
Jun 03 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 Python
python 视频下载神器(you-get)的具体使用
Jan 06 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
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
php中inlcude()性能对比详解
2012/09/16 PHP
win7安装php框架Yii的方法
2016/01/25 PHP
php简单实现多维数组排序的方法
2016/09/30 PHP
js 中 document.createEvent的用法
2010/08/29 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
js基础知识(公有方法、私有方法、特权方法)
2015/11/06 Javascript
JavaScript:Array类型全面解析
2016/05/19 Javascript
jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法
2016/07/27 Javascript
jquery自动补齐功能插件flexselect用法示例
2016/08/06 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
2016/09/26 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
2017/07/17 Javascript
js定时器实现倒计时效果
2017/11/05 Javascript
js实现文件上传功能 后台使用MultipartFile
2018/09/08 Javascript
vue3.0中使用postcss-pxtorem的具体方法
2019/11/20 Javascript
实例讲解JavaScript 计时事件
2020/07/04 Javascript
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
python中异常报错处理方法汇总
2016/11/20 Python
Python Flask-web表单使用详解
2017/11/18 Python
Python重新加载模块的实现方法
2018/10/16 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
2019/08/08 Python
Python实现把类当做字典来访问
2019/12/16 Python
Python如何操作docker redis过程解析
2020/08/10 Python
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
extern在函数声明中是什么意思
2014/01/19 面试题
《世界多美呀》教学反思
2014/03/02 职场文书
《沉香救母》教学反思
2014/04/19 职场文书
公司外出活动方案
2014/08/14 职场文书
2014年技术工作总结范文
2014/11/20 职场文书
医学生自荐信范文
2015/03/05 职场文书
选调生挂职锻炼工作总结
2015/10/23 职场文书
Python中的 enumerate和zip详情
2022/05/30 Python