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批量更改文件名的实现方法
Oct 29 Python
Pandas中把dataframe转成array的方法
Apr 13 Python
python 定义给定初值或长度的list方法
Jun 23 Python
python清除字符串前后空格函数的方法
Oct 21 Python
python 常见字符串与函数的用法详解
Nov 23 Python
Python计算一个点到所有点的欧式距离实现方法
Jul 04 Python
python config文件的读写操作示例
Sep 27 Python
Python Selenium参数配置方法解析
Jan 19 Python
基于Python数据结构之递归与回溯搜索
Feb 26 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
May 21 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
Jun 11 Python
Python 连接 MySQL 的几种方法
Sep 09 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 Session变量不能传送到下一页的解决方法
2009/11/27 PHP
php中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
PHP输出九九乘法表代码实例
2015/03/27 PHP
Codeigniter中集成smarty和adodb的方法
2016/03/04 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
laravel框架与其他框架的详细对比
2019/10/23 PHP
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
解析javascript 数组以及json元素的添加删除
2013/06/26 Javascript
js showModalDialog 弹出对话框的简单实例(子窗体)
2014/01/07 Javascript
用jquery实现的一个超级简单的下拉菜单
2014/05/18 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
详解JavaScript中this的指向问题
2017/01/20 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
2018/04/12 Javascript
JavaScript模板引擎原理与用法详解
2018/12/24 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
python实现给字典添加条目的方法
2014/09/25 Python
python使用cPickle模块序列化实例
2014/09/25 Python
详解Python传入参数的几种方法
2019/05/16 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
Python函数式编程实例详解
2020/01/17 Python
关于Python不换行输出和不换行输出end=““不显示的问题(亲测已解决)
2020/10/27 Python
使用CSS3美化HTML表单的技巧演示
2016/05/17 HTML / CSS
彪马日本官网:PUMA日本
2019/01/31 全球购物
JSF的标签库有哪些
2012/04/27 面试题
团日活动总结怎么写
2014/06/25 职场文书
企业趣味活动方案
2014/08/21 职场文书
学习雷锋精神活动总结
2015/02/06 职场文书
2015年仓管员工作总结
2015/04/21 职场文书
2015年推普周活动方案
2015/05/06 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript