详解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 相关文章推荐
详解Django中的过滤器
Jul 16 Python
详解tensorflow载入数据的三种方式
Apr 24 Python
在NumPy中创建空数组/矩阵的方法
Jun 15 Python
Python爬取商家联系电话以及各种数据的方法
Nov 10 Python
python爬取指定微信公众号文章
Dec 20 Python
scrapy-redis源码分析之发送POST请求详解
May 15 Python
django框架使用orm实现批量更新数据的方法
Jun 21 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
详解Python3定时器任务代码
Sep 23 Python
Python处理mysql特殊字符的问题
Mar 02 Python
使用python实现名片管理系统
Jun 18 Python
python从PDF中提取数据的示例
Oct 30 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调用c接口无错版介绍
2014/03/11 PHP
PHP封装的多文件上传类实例与用法详解
2017/02/07 PHP
php使用GD2绘制几何图形示例
2017/02/15 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
2017/07/03 PHP
Yii 框架入口脚本示例分析
2020/05/19 PHP
优化innerHTML操作(提高代码执行效率)
2011/08/20 Javascript
jQuery实现简单的列表式导航菜单效果代码
2015/08/31 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
2016/01/22 Javascript
详解JavaScript for循环中发送AJAX请求问题
2020/06/23 Javascript
Vue.js中关于侦听器(watch)的高级用法示例
2018/05/02 Javascript
微信小程序scroll-view实现字幕滚动
2018/07/14 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
从Node.js事件触发器到Vue自定义事件的深入讲解
2020/06/26 Javascript
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
python简单程序读取串口信息的方法
2015/03/13 Python
Python实现的破解字符串找茬游戏算法示例
2017/09/25 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
python解析含有重复key的json方法
2019/01/22 Python
树莓派安装OpenCV3完整过程的实现
2019/10/10 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
python 实现二维列表转置
2019/12/02 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
2020/02/21 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
2019/01/18 HTML / CSS
约瑟夫·特纳男装:Joseph Turner
2017/10/10 全球购物
应届生船舶驾驶求职信
2013/10/19 职场文书
事业单位考察材料范文
2014/12/25 职场文书
拾金不昧表扬信
2015/01/16 职场文书
幼儿教师远程研修感悟
2015/11/18 职场文书
MongoDB 常用的crud操作语句
2021/06/20 MongoDB
利用Python实现翻译HTML中的文本字符串
2022/06/21 Python
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS