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 相关文章推荐
写了个监控nginx进程的Python脚本
May 10 Python
python opencv之SIFT算法示例
Feb 24 Python
PyQt实现界面翻转切换效果
Apr 20 Python
Python3使用pandas模块读写excel操作示例
Jul 03 Python
CentOS7安装Python3的教程详解
Apr 10 Python
python3实现字符串操作的实例代码
Apr 16 Python
Python笔记之工厂模式
Nov 20 Python
Django 删除upload_to文件的步骤
Mar 30 Python
简单了解Java Netty Reactor三种线程模型
Apr 26 Python
基于python检查矩阵计算结果
May 21 Python
使用pandas模块实现数据的标准化操作
May 14 Python
Python+Appium自动化测试的实战
Jun 30 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/03/02 日漫
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
php集成开发环境详解
2019/09/24 PHP
索趣科技的答案
2007/02/07 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
Javascript实现字数统计
2015/07/03 Javascript
JavaScript实现的伸展收缩型菜单代码
2015/10/14 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
node.js require() 源码解读
2015/12/13 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
2017/05/03 Javascript
vue.js评论发布信息可插入QQ表情功能
2017/08/08 Javascript
JavaScript反射与依赖注入实例详解
2018/05/29 Javascript
Vue-cli打包后如何本地查看的操作
2020/09/02 Javascript
Python3处理HTTP请求的实例
2018/05/10 Python
python_opencv用线段画封闭矩形的实例
2018/12/05 Python
Python3 Tkinter选择路径功能的实现方法
2019/06/14 Python
Django对models里的objects的使用详解
2019/08/17 Python
Python3 使用pillow库生成随机验证码
2019/08/26 Python
Python 使用 environs 库定义环境变量的方法
2020/02/25 Python
django列表筛选功能的实现代码
2020/03/27 Python
python dir函数快速掌握用法技巧
2020/12/09 Python
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
意大利运动服减价商店:ScontoSport
2020/03/10 全球购物
Java语言程序设计测试题选择题部分
2014/04/03 面试题
历史学专业个人的自我评价
2013/10/13 职场文书
机械工程师岗位职责
2014/06/16 职场文书
2014年材料员工作总结
2014/11/19 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
Python道路车道线检测的实现
2021/06/27 Python
python字典进行运算原理及实例分享
2021/08/02 Python
python lambda 表达式形式分析
2022/04/03 Python
Nginx 匹配方式
2022/05/15 Servers