详解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中文问题解决方法(总结了多位前人经验,初学者必看)
Mar 13 Python
python获取当前计算机cpu数量的方法
Apr 18 Python
在Python中定义和使用抽象类的方法
Jun 30 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
Jun 27 Python
用Python分析3天破10亿的《我不是药神》到底神在哪?
Jul 12 Python
Python  unittest单元测试框架的使用
Sep 08 Python
Tensorflow实现酸奶销量预测分析
Jul 19 Python
基于Pytorch SSD模型分析
Feb 18 Python
python使用Geany编辑器配置方法
Feb 21 Python
解决django的template中如果无法引用MEDIA_URL问题
Apr 07 Python
Python切片列表字符串如何实现切换
Aug 06 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
Jan 27 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
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
PHP实现的简单组词算法示例
2018/04/10 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
用正则表达式 动态创建/增加css style script 兼容IE firefox
2009/03/10 Javascript
Web前端设计模式  制作漂亮的弹出层
2010/10/29 Javascript
详解有关easyUI的拖动操作中droppable,draggable用法例子
2017/06/03 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
浅谈vue.js导入css库(elementUi)的方法
2018/03/09 Javascript
js replace 全局替换的操作方法
2018/06/12 Javascript
jQuery实现每日秒杀商品倒计时功能
2019/09/06 jQuery
解决qrcode.js生成二维码时必须定义一个空div的问题
2020/07/09 Javascript
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
Python实现程序的单一实例用法分析
2015/06/03 Python
在Django框架中运行Python应用全攻略
2015/07/17 Python
Python的面向对象编程方式学习笔记
2016/07/12 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
Python代理IP爬虫的新手使用教程
2019/09/05 Python
django queryset 去重 .distinct()说明
2020/05/19 Python
详解pandas赋值失败问题解决
2020/11/29 Python
快速一键生成Python爬虫请求头
2021/03/04 Python
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
夏威夷灵感服装及配饰:Reyn Spooner
2018/09/18 全球购物
马德里著名的运动鞋商店:NOIRFONCE
2019/04/12 全球购物
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
2014/09/16 面试题
学生会主席事迹材料
2014/01/28 职场文书
运动会邀请函范文
2014/02/06 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
离婚被告答辩状
2015/05/22 职场文书
军训后的感想
2015/08/07 职场文书
小学校园广播稿
2015/08/18 职场文书
导游词之开封禹王台风景区
2019/12/02 职场文书
Python 中的Sympy详细使用
2021/08/07 Python
豆瓣2021评分最高动画剧集-豆瓣评分最高的动画剧集2021
2022/03/18 日漫
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL