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中if __name__ == '__main__'作用解析
Jun 29 Python
实例讲解Python设计模式编程之工厂方法模式的使用
Mar 02 Python
关于python的list相关知识(推荐)
Aug 30 Python
python机器学习实战之树回归详解
Dec 20 Python
python代码实现ID3决策树算法
Dec 20 Python
python实现停车管理系统
Nov 30 Python
python根据url地址下载小文件的实例
Dec 18 Python
python json.loads兼容单引号数据的方法
Dec 19 Python
浅析PEP570新语法: 只接受位置参数
Oct 15 Python
python3 使用traceback定位异常实例
Mar 09 Python
Python pandas之求和运算和非空值个数统计
Aug 07 Python
详解在OpenCV中如何使用图像像素
Mar 03 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 Smarty初体验二 获取配置信息
2011/08/08 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
php判断是否连接上网络的方法实例详解
2016/12/14 PHP
Laravel框架之解决前端显示图片问题
2019/10/24 PHP
在JavaScript中监听IME键盘输入事件
2011/05/29 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
jQuery插件 Jqplot图表实例
2016/06/18 Javascript
js前端面试题及答案整理(一)
2016/08/26 Javascript
微信公众号 摇一摇周边功能开发
2016/12/08 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
详解React中的组件通信问题
2017/07/31 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
javascript 通过键名获取键盘的keyCode方法
2017/12/31 Javascript
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
vue项目打包上传github并制作预览链接(pages)
2019/04/19 Javascript
小程序实现按下录音松开识别语音
2019/11/22 Javascript
零基础写python爬虫之使用urllib2组件抓取网页内容
2014/11/04 Python
python中threading超线程用法实例分析
2015/05/16 Python
简单了解python的一些位运算技巧
2019/07/13 Python
命令行运行Python脚本时传入参数的三种方式详解
2019/10/11 Python
在Django中实现添加user到group并查看
2019/11/18 Python
Python sys模块常用方法解析
2020/02/20 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
2020/02/26 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
Pyinstaller 打包发布经验总结
2020/06/02 Python
自学python用什么系统好
2020/06/23 Python
在Python中实现字典反转案例
2020/12/05 Python
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
日本最大的旅游网站:Rakuten Travel(乐天旅游)
2018/08/02 全球购物
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
怎样在程序里获得一个空指针
2015/01/24 面试题
加强作风建设演讲稿
2014/10/24 职场文书
作息时间调整通知
2015/04/22 职场文书
党员反腐倡廉学习心得体会
2015/08/15 职场文书