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实现多线程采集的2个代码例子
Jul 07 Python
Python编写一个闹钟功能
Jul 11 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
Jul 12 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 Python
Python File readlines() 使用方法
Mar 19 Python
wxPython的安装与使用教程
Aug 31 Python
Flask框架模板继承实现方法分析
Jul 31 Python
Pyorch之numpy与torch之间相互转换方式
Dec 31 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
Feb 20 Python
django haystack实现全文检索的示例代码
Jun 24 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
Jul 03 Python
Python字典dict常用方法函数实例
Nov 09 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彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
2014/08/06 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
详解PHP的Yii框架的运行机制及其路由功能
2016/03/17 PHP
PHP7新增运算符用法实例分析
2016/09/26 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
jquery iframe操作详细解析
2013/11/20 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
2014/02/28 Javascript
javascript中的事件代理初探
2014/03/08 Javascript
基于jquery实现导航菜单高亮显示(两种方法)
2015/08/23 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
Jquery on方法绑定事件后执行多次的解决方法
2016/06/02 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
JAVA中截取字符串substring用法详解
2017/04/14 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
详解webpack 多入口配置
2017/06/16 Javascript
ztree简介_动力节点Java学院整理
2017/07/19 Javascript
vue.js仿hover效果的实现方法示例
2019/01/28 Javascript
微信小程序上传多图到服务器并获取返回的路径
2019/05/05 Javascript
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
Python中文件遍历的两种方法
2014/06/16 Python
Python实现通讯录功能
2018/02/22 Python
TensorFlow实现指数衰减学习率的方法
2020/02/05 Python
如何理解python面向对象编程
2020/06/01 Python
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
吉尔德利巧克力公司:Ghirardelli Chocolate Company
2019/03/27 全球购物
平民服装店创业计划书
2014/01/17 职场文书
学生周末长期请假条
2014/02/15 职场文书
2014年大学生职业规划书:未来不是梦,只要勇敢冲!
2014/09/22 职场文书
新郎结婚感言
2015/07/31 职场文书