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 相关文章推荐
简单的编程0基础下Python入门指引
Apr 01 Python
Python新手在作用域方面经常容易碰到的问题
Apr 03 Python
Python爬取APP下载链接的实现方法
Sep 30 Python
python 函数传参之传值还是传引用的分析
Sep 07 Python
TensorFlow实现随机训练和批量训练的方法
Apr 28 Python
pandas的唯一值、值计数以及成员资格的示例
Jul 25 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
Apr 18 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
python爬虫 Pyppeteer使用方法解析
Sep 28 Python
python中rb含义理解
Jun 18 Python
python基于opencv实现人脸识别
Jan 04 Python
python 管理系统实现mysql交互的示例代码
Dec 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
聊天室php&mysql(一)
2006/10/09 PHP
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
使用php计算排列组合的方法
2013/11/13 PHP
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
PHP验证码无法显示的原因及解决办法
2017/08/11 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
启用OPCache提高PHP程序性能的方法
2019/03/21 PHP
laravel-admin解决表单select联动时,编辑默认没选上的问题
2019/09/30 PHP
PHP后门隐藏的一些技巧总结
2020/11/04 PHP
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
2010/03/04 Javascript
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
浅析Node.js查找字符串功能
2014/09/03 Javascript
javascript实现的字符串与十六进制表示字符串相互转换方法
2015/07/17 Javascript
使用JQuery实现智能表单验证功能
2016/03/08 Javascript
js ajaxfileupload.js上传报错的解决方法
2016/05/05 Javascript
JavaScript简单实现弹出拖拽窗口(二)
2016/06/17 Javascript
利用JS判断鼠标移入元素的方向
2016/12/11 Javascript
js正则表达式验证表单【完整版】
2017/03/06 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
vue-cli实现多页面多路由的示例代码
2018/01/30 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
2018/09/30 Javascript
从组件封装看Vue的作用域插槽的实现
2019/02/12 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
Python中函数的参数定义和可变参数用法实例分析
2015/06/04 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
python装饰器简介---这一篇也许就够了(推荐)
2019/04/01 Python
Python中使用__new__实现单例模式并解析
2019/06/25 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
如何利用Python开发一个简单的猜数字游戏
2019/09/22 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
PyTorch实现更新部分网络,其他不更新
2019/12/31 Python
python 已知平行四边形三个点,求第四个点的案例
2020/04/12 Python
基于Python的EasyGUI学习实践
2021/05/07 Python
python_tkinter事件类型详情
2022/03/20 Python