机器学习中的图片处理包----opencv/PIL/MATPLOTLIB

        在用python进行图像处理中经常用到matplotlib.pyplot、PIL、cv2三种库,这三种库图像读取和保存方法各异,并且图像读取时顺序也有差异,下面就此做一下总结:

(1)matplotlib.pyplot

安装:python2.7及以前版本  直接pip install PIL

        python3及以后   pip install pillow
使用:

import matplotlib.pyplot as plt
img=plt.imread(img_path)  ####img_path为图片路径
plt.imshow(img)
plt.show()  ####会在下面生成一个图像框来展示图像
print(type(img), img.dtype, np.min(img), np.max(img))

matplotlib读取进来的图片是unit8,0-255范围。

补充一句:有时我们会碰上matplotlib.pyplab,其实和pyplot一样都是用于绘图,但是pyplab里面带了许多NumPy和pyplot模块中常用的函数,意思就是说pylab结合了pyplot和numpy,对交互式使用来说比较方便,既可以画图又可以进行简单的计算。但是,对于一个项目来说,建议分别倒入使用。

(2)PIL.image.open

安装:pip install matplotlib

使用:

from PIL import Image
img=Image.open(img_path)
img.show()    #####借助本地图片编辑器显示
print(type(img), np.min(img), np.max(img))

PIL是有自己的数据结构的,但是可以转换成numpy数组,转换后的数组为unit8,0-255

(3)cv2.imread

安装:pip install opencv-python

使用:

import cv2
img=cv2.imread(img_path)
cv2.imshow("source image",img)  ####新建一个source image窗口来显示图片
cv2.waitKey()
print(type(img), img.dtype, np.min(img), np.max(img))

opencv读进来的是numpy数组,类型是uint8,0-255。

注意:plt.imread和PIL.Image.open读入的都是RGB顺序,而cv2.imread读入的是BGR顺序。使用时需要倍加注意。至于图片显示,大家习惯用plt.imshow(img):因为opencv读取进来的是bgr顺序呢的,而imshow需要的是rgb顺序,因此如果用OpenCV来读取图片,plt来显示图片需要先反过来plt.imshow(img[..., -1::-1])。

不同类型相互转换

  •     Image转opencv
img = cv2.cvtColor(numpy.asarray(image),cv2.COLOR_RGB2BGR)
  • opencv转Image   
image = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))

判断是否为opencv读取格式

isinstance(img, np.ndarray)  ###返回False即为opencv格式读取

至于对图片的其他操作,如crop/resize等操作,这三个库都有相应的函数封装,看你自己哪个使用的顺手就用哪个!!!!       (未完待续)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值