详解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中字符串的格式化方法小结
May 03 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
Jul 25 Python
使用Python来开发微信功能
Jun 13 Python
Django框架多表查询实例分析
Jul 04 Python
通过python改变图片特定区域的颜色详解
Jul 15 Python
Python实现PyPDF2处理PDF文件的方法示例
Sep 25 Python
Django关于admin的使用技巧和知识点
Feb 10 Python
在TensorFlow中实现矩阵维度扩展
May 22 Python
python 瀑布线指标编写实例
Jun 03 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 18 Python
python 使用cycle构造无限循环迭代器
Dec 02 Python
PyTorch 实现L2正则化以及Dropout的操作
May 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
PHP函数strip_tags的一个bug浅析
2014/05/22 PHP
php中try catch捕获异常实例详解
2014/11/21 PHP
PHP使用PDO 连接与连接管理操作实例分析
2020/04/21 PHP
探索Emberjs制作一个简单的Todo应用
2012/11/07 Javascript
JS定义回车事件(实现代码)
2013/07/08 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
jquery 显示*天*时*分*秒实现时间计时器
2014/05/07 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
深入理解Vue router的部分高级用法
2018/08/15 Javascript
Bootstrap模态对话框用法简单示例
2018/08/31 Javascript
vue项目动态设置页面title及是否缓存页面的问题
2018/11/08 Javascript
详解vue中async-await的使用误区
2018/12/05 Javascript
自定义Vue中的v-module双向绑定的实现
2019/04/17 Javascript
Websocket 向指定用户发消息的方法
2020/01/09 Javascript
vuex中store存储store.commit和store.dispatch的用法
2020/07/24 Javascript
[45:14]Optic vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
windows下安装python paramiko模块的代码
2013/02/10 Python
Python中字符串的修改及传参详解
2016/11/30 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
深入了解Django中间件及其方法
2019/07/26 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
2020/04/21 Python
文件上传服务器-jupyter 中python解压及压缩方式
2020/04/22 Python
Django使用django-simple-captcha做验证码的实现示例
2021/01/07 Python
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
AmazeUI底部导航栏与分享按钮的示例代码
2020/08/18 HTML / CSS
美国瑜伽服装和装备购物网站:Mukha Yoga
2019/02/22 全球购物
大学生毕业自我鉴定范文
2013/09/19 职场文书
一份没有按时交货失信于客户的检讨书
2014/09/19 职场文书
死亡证明书样本说明
2014/10/18 职场文书
2014年公务员个人工作总结
2014/11/22 职场文书
思想政治表现评语
2015/01/04 职场文书
敬业奉献模范事迹材料(2016精选版)
2016/02/26 职场文书
浅谈Redis位图(Bitmap)及Redis二进制中的问题
2021/07/15 Redis
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS