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实现的登录和操作开心网脚本分享
Jul 09 Python
Python for Informatics 第11章 正则表达式(一)
Apr 21 Python
Python存取XML的常见方法实例分析
Mar 21 Python
Python 中pandas.read_excel详细介绍
Jun 23 Python
Python实现登录接口的示例代码
Jul 21 Python
python实现校园网自动登录的示例讲解
Apr 22 Python
Django框架 查询Extra功能实现解析
Sep 04 Python
Python实现线性判别分析(LDA)的MATLAB方式
Dec 09 Python
基于python实现微信好友数据分析(简单)
Feb 16 Python
python 通过文件夹导入包的操作
Jun 01 Python
python中如何打包用户自定义模块
Sep 23 Python
Python中递归以及递归遍历目录详解
Oct 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 file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
2011/03/23 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
支付宝支付开发――当面付条码支付和扫码支付实例
2016/11/04 PHP
php统计数组不同元素的个数的实例方法
2019/09/26 PHP
JavaScript 字符串连接性能优化
2008/12/20 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
2013/07/11 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
vue.js的安装方法
2017/05/12 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
2017/08/16 jQuery
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
javascript面向对象创建对象的方式小结
2019/07/29 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
[09:37]2018DOTA2国际邀请赛寻真——不懈追梦的Team Serenity
2018/08/13 DOTA
python简单线程和协程学习心得(分享)
2017/06/14 Python
代码讲解Python对Windows服务进行监控
2018/02/11 Python
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
python实现简单井字棋小游戏
2020/03/05 Python
Python unittest框架操作实例解析
2020/04/13 Python
简单了解python列表和元组的区别
2020/05/14 Python
Python2.6版本pip安装步骤解析
2020/08/17 Python
Python实现我的世界小游戏源代码
2021/03/02 Python
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
美津浓巴西官方网站:Mizuno巴西
2019/07/24 全球购物
戴森比利时官方网站:Dyson BE
2020/10/03 全球购物
GWebs公司笔试题
2012/05/04 面试题
幼儿园中班上学期评语
2014/04/18 职场文书
篮球比赛策划方案
2014/06/05 职场文书
2016年五一促销广告语
2016/01/28 职场文书
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL
javascript拖曳互换div的位置实现示例
2021/06/28 Javascript