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 相关文章推荐
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
Apr 23 Python
使用python在本地电脑上快速处理数据
Jun 22 Python
django ajax json的实例代码
May 29 Python
python使用adbapi实现MySQL数据库的异步存储
Mar 19 Python
python自动发邮件总结及实例说明【推荐】
May 31 Python
Python多版本开发环境管理工具介绍
Jul 03 Python
python 读取更新中的log 或其它文本方式
Dec 24 Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
Mar 16 Python
Python中如何添加自定义模块
Jun 09 Python
python Yaml、Json、Dict之间的转化
Oct 19 Python
理解深度学习之深度学习简介
Apr 14 Python
Python turtle编写简单的球类小游戏
Mar 31 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/08/19 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
php关联数组快速排序的方法
2015/04/17 PHP
YII2 实现多语言配置的方法分享
2017/01/11 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
如何获取JQUERY AJAX返回的JSON结果集实现代码
2012/12/10 Javascript
jQuery遍历之next()、nextAll()方法使用实例
2014/11/08 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
原生js实现密码输入框值的显示隐藏
2017/07/17 Javascript
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
2018/12/04 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
javascript防抖函数debounce详解
2019/06/11 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
2020/11/07 Javascript
[01:27:30]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
使用Python3制作TCP端口扫描器
2017/04/17 Python
Python实现进程同步和通信的方法
2018/01/02 Python
Python中如何导入类示例详解
2019/04/17 Python
python selenium登录豆瓣网过程解析
2019/08/10 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
2019/11/29 Python
一文读懂Python 枚举
2020/08/25 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
python爬虫 requests-html的使用
2020/11/30 Python
scrapy头部修改的方法详解
2020/12/06 Python
巴西宠物商店:Cobasi
2019/04/19 全球购物
英语专业推荐信
2013/11/16 职场文书
挂科检讨书范文
2014/02/20 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
英语三分钟演讲稿
2014/08/19 职场文书
庆祝国庆节标语
2014/10/09 职场文书
李强感恩观后感
2015/06/17 职场文书
初中美术教学反思
2016/02/17 职场文书
总结高并发下Nginx性能如何优化
2021/11/01 Servers