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 struct模块解析
Jun 12 Python
django实现前后台交互实例
Aug 07 Python
机器学习经典算法-logistic回归代码详解
Dec 22 Python
Python实现的朴素贝叶斯分类器示例
Jan 06 Python
Django中cookie的基本使用方法示例
Feb 03 Python
详解小白之KMP算法及python实现
Apr 04 Python
python2和python3实现在图片上加汉字的方法
Aug 22 Python
python实现简单日志记录库glog的使用
Dec 13 Python
python的Jenkins接口调用方式
May 12 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
Feb 05 Python
python 实现有道翻译功能
Feb 26 Python
图神经网络GNN算法
May 11 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获取当前文件的父目录方法汇总
2016/07/21 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
2013/01/09 Javascript
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
2013/04/02 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
使用JQuery中的trim()方法去掉前后空格
2016/09/16 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
2019/11/04 Javascript
js实现小星星游戏
2020/03/23 Javascript
[37:03]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第二场 12.16
2020/12/18 DOTA
python 合并文件的具体实例
2013/08/08 Python
用Python制作在地图上模拟瘟疫扩散的Gif图
2015/03/31 Python
python开发利器之ulipad的使用实践
2017/03/16 Python
Python实现的下载网页源码功能示例
2017/06/13 Python
Python使用combinations实现排列组合的方法
2018/11/13 Python
postman传递当前时间戳实例详解
2019/09/14 Python
python利用dlib获取人脸的68个landmark
2019/11/27 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
2020/02/07 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
HTML5 body设置全屏背景图片的示例代码
2020/12/08 HTML / CSS
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
Interhome丹麦:在线预订度假屋和公寓
2019/07/18 全球购物
自荐信封面
2013/12/04 职场文书
巡警年度自我鉴定
2014/02/21 职场文书
四下基层实施方案
2014/03/28 职场文书
十周年庆典策划方案
2014/06/03 职场文书
golang中的并发和并行
2021/05/08 Golang
python中的None与NULL用法说明
2021/05/25 Python