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中pycurl库的用法实例
Sep 30 Python
python通过文件头判断文件类型
Oct 30 Python
Python工程师面试题 与Python基础语法相关
Jan 14 Python
Python3如何解决字符编码问题详解
Apr 23 Python
关于反爬虫的一些简单总结
Dec 13 Python
python如何让类支持比较运算
Mar 20 Python
python3爬虫之设计签名小程序
Jun 19 Python
python用post访问restful服务接口的方法
Dec 07 Python
pyqt5 使用label控件实时显示时间的实例
Jun 14 Python
浅谈python输出列表元素的所有排列形式
Feb 26 Python
Python读写操作csv和excle文件代码实例
Mar 16 Python
python实现一次性封装多条sql语句(begin end)
Jun 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 得到根目录的 __FILE__ 常量
2008/07/23 PHP
php 删除无限级目录与文件代码共享
2008/11/22 PHP
PHP的curl实现get,post和cookie(实例介绍)
2013/06/17 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
php 过滤英文标点符号及过滤中文标点符号代码
2014/06/12 PHP
php倒计时出现-0情况的解决方法
2016/07/28 PHP
php实现URL加密解密的方法
2016/11/17 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
2017/04/09 PHP
php简单构造json多维数组的方法示例
2017/06/08 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
jquery中通过过滤器获取表单元素的实现代码
2011/07/05 Javascript
深入php面向对象、模式与实践
2016/02/16 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
基于Nodejs利用socket.io实现多人聊天室
2017/02/22 NodeJs
JavaScript中join()、splice()、slice()和split()函数用法示例
2018/08/24 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
Element PageHeader页头的使用方法
2020/07/26 Javascript
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
2015/02/04 Python
python通过ftplib登录到ftp服务器的方法
2015/05/08 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
2016/09/18 Python
python使用SMTP发送qq或sina邮件
2017/10/21 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
redis数据库及与python交互用法简单示例
2019/11/01 Python
在Tensorflow中查看权重的实现
2020/01/24 Python
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
幼儿教师个人求职信范文
2013/09/21 职场文书
纪念九一八事变83周年国旗下讲话稿
2014/09/15 职场文书
先进班集体申报材料
2014/12/26 职场文书
幼儿园班级工作总结2015
2015/05/25 职场文书
js实现上传图片到服务器
2021/04/11 Javascript
磁贴还没死, 微软Win11可修改注册表找回Win10开始菜单
2021/11/21 数码科技
Spring this调用当前类方法无法拦截的示例代码
2022/03/20 Java/Android