详解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列表与元组详解实例
Nov 01 Python
35个Python编程小技巧
Apr 01 Python
Python中isnumeric()方法的使用简介
May 19 Python
Python中import导入上一级目录模块及循环import问题的解决
Jun 04 Python
Python numpy 提取矩阵的某一行或某一列的实例
Apr 03 Python
python感知机实现代码
Jan 18 Python
python简单区块链模拟详解
Jul 03 Python
python接口调用已训练好的caffe模型测试分类方法
Aug 26 Python
Python如何基于rsa模块实现非对称加密与解密
Jan 03 Python
Python 实现网课实时监控自动签到、打卡功能
Mar 12 Python
使用python计算三角形的斜边例子
Apr 15 Python
Python离线安装各种库及pip的方法
Nov 28 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 中文处理函数集合
2008/08/27 PHP
jQuery 入门讲解1
2009/04/15 Javascript
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
JavaScript简单下拉菜单实例代码
2015/09/07 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
2015/11/17 Javascript
js正则表达式验证表单【完整版】
2017/03/06 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
vue-cli 如何打包上线的方法示例
2018/05/08 Javascript
vuex提交state&&实时监听state数据的改变方法
2018/09/16 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
layui实现下拉框三级联动
2019/07/26 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
2019/09/14 Javascript
JS实现页面鼠标点击出现图片特效
2020/08/19 Javascript
JavaScript如何实现防止重复的网络请求的示例
2021/01/28 Javascript
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
python实现绘制树枝简单示例
2014/07/24 Python
python按时间排序目录下的文件实现方法
2018/10/17 Python
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
Python去除字符串前后空格的几种方法
2019/03/04 Python
六行python代码的爱心曲线详解
2019/05/17 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
基于 HTML5 WebGL 实现的医疗物流系统
2019/10/08 HTML / CSS
英国天然保健品网站:Simply Supplements
2017/03/22 全球购物
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
如何进行Linux分区优化
2016/09/13 面试题
执行力心得体会
2013/12/31 职场文书
先进工作者获奖感言
2014/02/08 职场文书
事业单位聘任报告
2015/03/02 职场文书
死者家属慰问信
2015/03/24 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
PostgreSQL存储过程实用脚本(二):创建函数入门
2021/04/05 PostgreSQL
解决Mysql中的innoDB幻读问题
2022/04/29 MySQL