1. 库简介

深度学习领域,对视频图片样本的处理占了很大一部分比重。

而Python环境下的图像处理库种类较多,无论是精度,速度等方面都有不同的差异,这里予以总结。

Python环境下,相关的包有:

Numpy:主要作为图像数据的中转

Skimage:速度较慢,主要是caffe测试的时候默认的caffe.io.load使用,不建议使用(Skimage,读取RGB,通道HWC,范围[0,1])

主要的图像处理包:

CV2:opencv的python版本,应用较广

PIL:Python自带的图像处理库,但功能较简单

Pillow: 出发点在于PIL只支持python2.7,添加了一些新特性

Pillow-SIMD:Pillow增强版本,约有5倍的增益,比CV2还要快;安装方法:

$ pip uninstall

pillow

$ CC="cc

-mavx2" pip install -U --force-reinstall pillow-simd

Matplotlib:一般使用matplot.pyplot方法进行画图;

2. 平台需求

Caffe需要的图像格式是BGR,通道类型是CHW,范围[0,255];

后续的深度学习平台例如Pytorch需要的图像格式是RGB,通道类型CHW,范围[0,1];

(注:平台通道类型的要求CHW实际上是CUDA高效运算的需求,NCHW)

3. 常用库Numpy

Numpy对多维矩阵A的操作一般有:

A.shape #HWC

type(A) #numpy.array

A.dtype() #uint8,

float…

np.min(A), np.max(A) #最值

CV2

读取BGR,通道HWC,范围[0,255] ,类型uint8; 图像类型numpy.ndarray;

PIL,Pillow, Pillow-SIMD

读取RGB,通道HWC,范围[0,255],类型uint8;图像类型PngImageFile (np.array, Image.fromarray直接与numpy互相转换)

有.mode方法---rgb信息

Matplotlib

读取RGB,通道HWC,范围[0,1] ,类型float;图像类型numpy.ndarray

Skimage

读取RGB,通道HWC,范围[0,255],类型uint8;图像类型numpy.ndarray

有.mode方法---rgb信息

比较特殊,读取的时候image= io.imread('test.jpg',as_grey=False);

彩图是uint8,[0,255];灰度图float,[0,1];

彩图resize变成float,[0,1];

较混乱,不适用。。。

4. 读取CV2

#默认读取为三通道彩图,可通过参数更改为单通道灰度图

img = cv2.imread('examples.png')

img_gray = cv2.imread('examples.png', 0)

PIL,Pillow, Pillow-SIMD

img = Image.open('examples.png')

Matplotlib

img = plt.imread('examples.png')

5. 显示

Matplotlib最主要目的是用来绘图:

将numpy数组格式的RGB图像显示;

float类型的图像,范围0-1;如果是uint8图像,范围是0-255;

Matplotlib

img = plt.imread('examples.png')

plt.imshow(img)

plt.show()

CV2

img = cv2.imread('examples.png')

plt.imshow(img[..., -1::-1]) # 因为opencv读取进来的是bgr顺序,而imshow需要的是rgb顺序,因此需要先反过来,也可以plt.imshow(img[:,:,::-1])

plt.show()

PIL

#可直接打开

plt.imshow(Image.open('examples.png')) # 实际上plt.imshow可以直接显示PIL格式图像

plt.show()

#转换为需要的numpy格式打开

img_gray = img.convert('L') #转换成灰度图像

img = np.array(img)

img_gray = np.array(img_gray)

plt.imshow(img) # or plt.imshow(img / 255.0)5

plt.show()

plt.imshow(img_gray, cmap=plt.gray()) # 显示灰度图要设置cmap参数

plt.show()

6. 转换

主要是通过numpy的transpose操作,修正RGB,BGR;

例如:

a是rgb图像,那么

a[::-1],a[:,::-1],a[:,:,::-1]分别是X轴的镜像,Y轴的镜像,BGR转换为RGB;

opencv相关图像操作;

img_gray = cv2.cvtColor(img,

cv2.COLOR_BGR2GRAY) # BGR转灰度

img_bgr = cv2.cvtColor(img_gray,

cv2.COLOR_GRAY2BGR) # 灰度转BRG

img_rgb = cv2.cvtColor(img_gray,

cv2.COLOR_GRAY2RGB) # 灰度转RGB

b,g,r = cv2.split(img) #bgr图像分离三个通道

img2 = cv2.merge([r,g,b]) #merge成rgb图像

PIL相关图像操作:

img = Image.open('examples.png')

img_gray = image.convert(‘L’)

img_color = img_gray.convert(‘RGB’)

PIL与numpy格式转换操作:

numpy.asarray()

Image.fromarray()

如果是pil转opencv,记得需要通过copy命令得到的才可以进行cv2操作,不然会有bug。切忌

PIL类型,尺寸信息,通过.size方法,得到WH;

Numpy类型,通过shape方法,得到HWC

注:如果是PIL自己的类型,得到尺寸信息要使用.size方法

print image.size #width height

同样进行resize操作,顺序也是wh;

img2_resize = img2.resize((960,540))

img2_resize.save('test1.jpg')

而如果使用cv2操作,顺序也是wh;

img3_resize = cv2.resize(img3, (960,540))

cv2.imwrite('test2.jpg', img3_resize)

但如果放在numpy里面,调用shape方法,得到的是HWC;

7. 保存PIL

#直接save方法

img = Image.open('examples.png')

img.save('examples2.png')

img_gray = img.convert('L')

img_gray.save('examples_gray.png') # 不管是灰度还是彩色,直接用save函数保存就可以,但注意,只有PIL格式的图片能够用save函数

CV2

#cv2.imwrite

import cv2

img = cv2.imread('examples.png') # 这是BGR图片

cv2.imwrite('examples2.png', img) # 这里也应该用BGR图片保存,这里要非常注意,因为用pylab或PIL读入的图片都是RGB的,如果要用opencv存图片就必须做一个转换

img_gray = cv2.cvtColor(img,

cv2.COLOR_BGR2GRAY)

cv2.imwrite('examples_gray.png', img_gray)

python图像库_Python常用图像处理库整理相关推荐

  1. python图像对比_Python多种图像处理库的比较与比较

    我帮助在libvips wiki 上维护一个页面,比较20个左右的常用图像处理库,以便快速和内存使用,包括相当多的Python系统. 基准测试非常简单:加载5,000 x 5,000像素RGB TIF ...

  2. Python中常用图像处理库

    Python中常用图像处理库 文章目录 Python中常用图像处理库 1 OpenCV-Python 2 Numpy 3 matplotlib 4 skimage 5 PIL(Python Imagi ...

  3. python第三方库排行-Python模块汇总(常用第三方库)

    模块 定义 计算机在开发过程中,代码越写越多,也就越难以维护,所以为了编写可维护的代码,我们会把函数进行分组,放在不同的文件里.在python里,一个.py文件就是一个模块 优点: 提高代码的可维护性 ...

  4. python著作_Python 常用库和著作介绍 ---全能与潮流

    2017年最新IEEE世界编程语言排行榜公布,Python高居榜首. 在此之前,Python被广泛应用在web开发.系统运维.数据爬虫.数据分析和游戏服务器开发等,随着人工智能的浪潮,Python以其 ...

  5. python标准库和第三方库_python常用标准库及三方库

    python 常用标准库及三方库 作者: yegle 链接: https://www.zhihu.com/question/20501628/answer/153211 84 著作权归作者所有.商业转 ...

  6. python下载文件的第三方库_Python常用第三方库(转载)

    wxPython 如果你之前是 windows 程序员,用 MFC 或者 WIN32API 开发界面程序,那进入 Python 国度最好的 GUI 选择应该是 wxPython.它是 wxWidget ...

  7. python常用标准库的基本用法_Python常用标准库之fileinput

    Python常用标准库之fileinput fileinput模块用于对标准输入或多个文件进行逐行遍历.这个模块的使用非常简单,相比open()方法批量处理文件,fileinput模块可以对文件.行号 ...

  8. python常用类库_Python常用第三方库(转载)

    wxPython 如果你之前是 windows 程序员,用 MFC 或者 WIN32API 开发界面程序,那进入 Python 国度最好的 GUI 选择应该是 wxPython.它是 wxWidget ...

  9. 基于树莓派的python GPIO编程-常用函数综合整理

    Hello,朋友们大家好,欢迎大家来到LIUSE网络. 随着Mini型PC越来越多,与之而来的创客也丰富起来,比如说Arduino就是一个非常好里例子. 不过,Arduino毕竟是一块适合入门型的基础 ...

最新文章

  1. Python 技术篇 - 利用os库实现读取遍历指定路径的文件,区分文件和文件夹
  2. opencv Remap 图像的映射
  3. springboot中如何获取yml配置文件中的配置信息
  4. 不同特权级间代码段的跳转{ 门 + 跳转(jmp + call) + 返回(ret) }
  5. JMS--Queue实战
  6. python题目(1)
  7. Ubuntu 下的根目录为
  8. Silverlight DataGrid 在显示数据, 如果遇到全角的符号, 好像会出错. 待测试.
  9. 3.中小型企业通用自动化运维架构 -- Ansible playbook
  10. 现代支付系统的资金流向
  11. DRF总结(三)Serializer的使用
  12. MAC chrome 谷歌浏览器全屏显示——隐藏菜单栏
  13. USB协议详解第23讲(USB包-握手包及其工作方式)
  14. Jmeter实战:零基础也能看懂的性能测试
  15. 一個“語言”引發的血案
  16. 微信公众号开发系列三:响应关注和取关事件
  17. JavaWeb(一)_JavaWeb开发入门
  18. [C/C++]神经元结构编码
  19. buuctf blacklist
  20. 程序员的职场晋升之路

热门文章

  1. 程超:突破瓶颈!如何不断的提高自己
  2. MATLAB GPU加速
  3. 记录执行hivesql时报org.apache.hadoop.hdfs.BlockMissingException:Could not obtain block错误
  4. Express使用nodemailer完成邮箱验证功能详细流程(含封装,可作自定义模块)
  5. Redis通讯协议RESP详解
  6. 大战Java虚拟机【2】—— GC策略
  7. 匿名管道和pipe函数
  8. 2017-08-14 前端日报
  9. WPF Multi-Touch 开发:Windows 7 安装多点触屏模拟器
  10. TPlink 默认用户名密码