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爬虫框架Scrapy安装使用步骤
Apr 01 Python
python列表的常用操作方法小结
May 21 Python
python 3.5下xadmin的使用及修复源码bug
May 10 Python
Python将8位的图片转为24位的图片实现方法
Oct 24 Python
Python 正则表达式匹配字符串中的http链接方法
Dec 25 Python
pygame编写音乐播放器的实现代码示例
Nov 19 Python
Python监控服务器实用工具psutil使用解析
Dec 19 Python
Pyinstaller加密打包应用的示例代码
Jun 11 Python
python 如何将office文件转换为PDF
Sep 22 Python
python 实现表情识别
Nov 21 Python
在PyCharm中安装PaddlePaddle的方法
Feb 05 Python
教你怎么用python爬取爱奇艺热门电影
May 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
DC宇宙的第一个英雄,堪称动漫史鼻祖,如今成为美国文化的象征
2020/04/09 欧美动漫
手冲咖啡应该是现代精品咖啡店的必备选项吗?
2021/03/03 冲泡冲煮
新浪新闻小偷
2006/10/09 PHP
php+mysql数据库查询实例
2015/01/21 PHP
form表单传递数组数据、php脚本接收的实例
2017/02/09 PHP
jQuery each()小议
2010/03/18 Javascript
JS替换字符串中字符即替换全部而不是第一个
2014/06/04 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
JS简单设置下拉选择框默认值的方法
2016/08/20 Javascript
jQuery复制节点用法示例(clone方法)
2016/09/08 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
JavaScript中定义对象原型的两种使用方法
2016/12/15 Javascript
Bootstrap CSS组件之大屏幕展播
2016/12/17 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
React父子组件间的传值的方法
2018/11/13 Javascript
通过javascript实现段落的收缩与展开
2019/06/26 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
js 判断当前时间是否处于某个一个时间段内
2019/09/19 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
使用Python求解最大公约数的实现方法
2015/08/20 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
校园报刊亭创业计划书
2014/01/02 职场文书
幼儿园教师节演讲稿
2014/09/03 职场文书
教师党员批评与自我批评发言稿
2014/10/15 职场文书
小学三八妇女节活动总结
2015/02/06 职场文书
python删除csv文件的行列
2021/04/06 Python
用Python监控你的朋友都在浏览哪些网站?
2021/05/27 Python
Python之matplotlib绘制折线图
2022/04/13 Python