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 相关文章推荐
python3使用tkinter实现ui界面简单实例
Jan 10 Python
使用python解析xml成对应的html示例分享
Apr 02 Python
采用Psyco实现python执行速度提高到与编译语言一样的水平
Oct 11 Python
Python简单删除列表中相同元素的方法示例
Jun 12 Python
Python基于matplotlib绘制栈式直方图的方法示例
Aug 09 Python
Python机器学习logistic回归代码解析
Jan 17 Python
Flask 让jsonify返回的json串支持中文显示的方法
Mar 26 Python
python超时重新请求解决方案
Oct 21 Python
深入理解Python 多线程
Jun 16 Python
python读写数据读写csv文件(pandas用法)
Dec 14 Python
python使用glob检索文件的操作
May 20 Python
python简单验证码识别的实现过程
Jun 20 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
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
纯php生成随机密码
2015/10/30 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
php表单处理操作
2017/11/16 PHP
地震发生中逃生十大法则
2008/05/12 Javascript
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
控制文字内容的显示与隐藏示例
2014/06/11 Javascript
Javascript获取统一管理的提示语(message)
2016/02/03 Javascript
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
微信小程序手机号码验证功能的实例代码
2018/08/28 Javascript
vue中使用微信公众号js-sdk踩坑记录
2019/03/29 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
javascript实现fetch请求返回的统一拦截
2019/12/22 Javascript
在Python中使用mechanize模块模拟浏览器功能
2015/05/05 Python
详解Python中for循环是如何工作的
2017/06/30 Python
python3.0 模拟用户登录,三次错误锁定的实例
2017/11/02 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
python自定义函数实现最大值的输出方法
2019/07/09 Python
Python使用type关键字创建类步骤详解
2019/07/23 Python
Python中 Global和Nonlocal的用法详解
2020/01/20 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
Python selenium环境搭建实现过程解析
2020/09/08 Python
html5 input属性使用示例
2013/06/28 HTML / CSS
网络工程专业毕业生推荐信
2013/10/28 职场文书
应届电子商务毕业自荐书范文
2014/02/11 职场文书
六查六看剖析材料
2014/02/15 职场文书
《难忘的泼水节》教学反思
2014/02/27 职场文书
工伤赔偿协议书范本
2014/04/15 职场文书
司法局火灾防控方案
2014/06/05 职场文书
获奖感言怎么写
2015/07/31 职场文书
2019年个人工作总结范文(3篇)
2019/08/27 职场文书
导游词之吉林花园山
2019/10/17 职场文书