详解Python Opencv和PIL读取图像文件的差别


Posted in Python onDecember 27, 2019

前言

之前在进行深度学习训练的时候,偶然发现使用PIL读取图片训练的效果要比使用python-opencv读取出来训练的效果稍好一些,也就是训练更容易收敛。可能的原因是两者读取出来的数据转化为pytorch中Tensor变量稍有不同,这里进行测试。

之后的代码都导入了:

from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
import torch
import cv2

测试

使用PIL和cv2读取图片时会有细微的区别,通过下面的代码可以发现两者读取图片是有区别的,也就是使用PIL读取出来的图片转为numpy格式和直接使用cv读取的图片在像素点上并不是完全一致:

In[11]: image = cv2.imread('datasets/0_target.jpg')
In[18]: image_pil = Image.open('datasets/0_target.jpg').convert('RGB')
In[19]: image_pil = np.array(image_pil)
In[20]: image_cv = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
In[21]: image_cv == image_pil
Out[21]: 
array([[[ True, True, False],
    [ True, False, False],
    [False, False, False],
    ...,
    [ True, True, True],
    [ True, True, True],
    [ True, True, True]],

    [[ True, True, False],
    [ True, True, True],
    [False, True, False],
    ...,
    [ True, True, False],
    [ True, True, True],
    [ True, True, True]],

    [[ True, True, False],
    [ True, True, True],
    [False, False, False],
    ...,
    [ True, True, True],
    [ True, True, True],
    [ True, True, False]],

    ...,

    [[ True, True, True],
    [ True, True, True],
    [ True, True, True],
    ...,
    [False, False, True],
    [ True, True, True],
    [False, False, False]],

    [[ True, True, True],
    [ True, True, True],
    [ True, True, True],
    ...,
    [ True, True, True],
    [ True, True, True],
    [False, False, False]],

    [[ True, False, False],
    [ True, False, False],
    [ True, False, False],
    ...,
    [ True, True, True],
    [False, False, False],
    [ True, False, False]]])
In[26]: image_cv.shape
Out[26]: (682, 700, 3)
In[27]: image_pil.shape
Out[27]: (682, 700, 3)
In[28]: image_pil - image_cv
Out[28]: 
array([[[ 0,  0,  1],
    [ 0, 255,  3],
    [255,  1,  2],
    ...,
    [ 0,  0,  0],
    [ 0,  0,  0],
    [ 0,  0,  0]],

    [[ 0,  0,  2],
    [ 0,  0,  0],
    [255,  0,  2],
    ...,
    [ 0,  0, 254],
    [ 0,  0,  0],
    [ 0,  0,  0]],

    [[ 0,  0,  2],
    [ 0,  0,  0],
    [255,  1,  2],
    ...,
    [ 0,  0,  0],
    [ 0,  0,  0],
    [ 0,  0, 254]],

    ...,

    [[ 0,  0,  0],
    [ 0,  0,  0],
    [ 0,  0,  0],
    ...,
    [254,  1,  0],
    [ 0,  0,  0],
    [ 1, 255,  3]],

    [[ 0,  0,  0],
    [ 0,  0,  0],
    [ 0,  0,  0],
    ...,
    [ 0,  0,  0],
    [ 0,  0,  0],
    [ 2, 254,  4]],

    [[ 0,  1, 253],
    [ 0,  1, 253],
    [ 0,  1, 255],
    ...,
    [ 0,  0,  0],
    [ 1, 254,  1],
    [ 0, 255,  2]]], dtype=uint8)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中请使用isinstance()判断变量类型
Aug 25 Python
python多重继承新算法C3介绍
Sep 28 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
Sep 19 Python
浅谈python配置与使用OpenCV踩的一些坑
Apr 02 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
Jun 11 Python
Python装饰器限制函数运行时间超时则退出执行
Apr 09 Python
python中的&&及||的实现示例
Aug 07 Python
详解python中各种文件打开模式
Jan 19 Python
Python列表操作方法详解
Feb 09 Python
结束运行python的方法
Jun 16 Python
使用anaconda安装pytorch的实现步骤
Sep 03 Python
Python 如何实现文件自动去重
Jun 02 Python
pandas 对group进行聚合的例子
Dec 27 #Python
pandas-resample按时间聚合实例
Dec 27 #Python
python 实现简单的FTP程序
Dec 27 #Python
浅谈对pytroch中torch.autograd.backward的思考
Dec 27 #Python
python实现异常信息堆栈输出到日志文件
Dec 26 #Python
Python的对象传递与Copy函数使用详解
Dec 26 #Python
Python pandas库中的isnull()详解
Dec 26 #Python
You might like
如何给phpadmin一个保护
2006/10/09 PHP
PHP实现克鲁斯卡尔算法实例解析
2014/08/22 PHP
yii2超好用的日期组件和时间组件
2016/05/05 PHP
使用Jquery来实现可以输入值的下拉选单 雏型
2011/12/06 Javascript
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
javascript中call和apply方法浅谈
2013/09/27 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
js换图片效果可进行定时操作
2014/06/09 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
从0开始学Vue
2016/10/27 Javascript
vue.js获得当前元素的文字信息方法
2018/03/09 Javascript
详解Webpack loader 之 file-loader
2018/11/07 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
vue实现抖音时间转盘
2019/09/08 Javascript
Django自定义分页与bootstrap分页结合
2021/02/22 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
Python中eval带来的潜在风险代码分析
2017/12/11 Python
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
2019/07/02 Python
Python3内置模块random随机方法小结
2019/07/13 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
python创建子类的方法分析
2019/11/28 Python
Python实现手绘图效果实例分享
2020/07/22 Python
使用python批量修改XML文件中图像的depth值
2020/07/22 Python
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
波兰最大的度假胜地和城市公寓租赁运营商:Sun & Snow
2018/10/18 全球购物
Mybag美国/加拿大:英国奢华包包和名牌手袋网站
2020/02/16 全球购物
Ajax实现页面无刷新留言效果
2021/03/24 Javascript
网络工程专业毕业生推荐信
2013/10/28 职场文书
现实表现材料范文
2014/12/23 职场文书
2015年推普周活动方案
2015/05/06 职场文书
法律意见书范文
2015/06/04 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
Python中如何处理常见报错
2022/01/18 Python
使用Nginx的访问日志统计PV与UV
2022/05/06 Servers