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网络编程学习笔记(四):域名系统
Jun 09 Python
Python中类型关系和继承关系实例详解
May 25 Python
Python和Perl绘制中国北京跑步地图的方法
Mar 03 Python
使用python爬虫实现网络股票信息爬取的demo
Jan 05 Python
python dataframe astype 字段类型转换方法
Apr 11 Python
使用Python实现从各个子文件夹中复制指定文件的方法
Oct 25 Python
Python  Django 母版和继承解析
Aug 09 Python
Python随机函数库random的使用方法详解
Aug 21 Python
Flask 上传自定义头像的实例详解
Jan 09 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
Sep 11 Python
2021年值得向Python开发者推荐的VS Code扩展插件
Jan 25 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
Feb 24 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以指定字段为索引返回数据库所取的数据数组
2013/06/30 PHP
PHP文件上传判断file是否己选择上传文件的方法
2014/11/10 PHP
php中Socket创建与监听实现方法
2015/01/05 PHP
jquery 注意事项与常用语法小结
2010/06/07 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
2013/10/01 Javascript
Node.js实现Excel转JSON
2015/04/24 Javascript
js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
2015/07/18 Javascript
JS验证 只能输入小数点,数字,负数的实现方法
2016/10/07 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
2017/05/07 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
Vue中props的使用详解
2018/06/15 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
JavaScript如何判断input数据类型
2020/02/06 Javascript
Python的Urllib库的基本使用教程
2015/04/30 Python
python通过函数属性实现全局变量的方法
2015/05/16 Python
python中星号变量的几种特殊用法
2016/09/07 Python
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
python计算Content-MD5并获取文件的Content-MD5值方式
2020/04/03 Python
Python自动化测试中yaml文件读取操作
2020/08/20 Python
使用CSS3创建动态菜单效果
2015/07/10 HTML / CSS
深入剖析HTML5 内联框架iFrame
2016/05/04 HTML / CSS
使用html5新特性轻松监听任何App自带返回键的示例
2018/03/13 HTML / CSS
Omio中国:全欧洲低价大巴、火车和航班搜索和比价
2018/08/09 全球购物
哪些情况下不应该使用索引
2015/07/20 面试题
了解AppleShare protocol(AppleShare协议)吗
2015/08/28 面试题
秋季运动会稿件
2014/01/30 职场文书
动物科学专业求职信
2014/07/27 职场文书
三问三解心得体会
2014/09/05 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
2015年项目经理工作总结
2015/04/30 职场文书
环保建议书作文300字
2015/09/14 职场文书
JavaScript选择器函数querySelector和querySelectorAll
2021/11/27 Javascript
世界十大动漫制作公司排行榜,迪士尼上榜,第二是美国代表性文化符
2022/03/18 欧美动漫