详解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运行的17个时新手常见错误小结
Aug 07 Python
django自定义Field实现一个字段存储以逗号分隔的字符串
Apr 27 Python
matplotlib设置legend图例代码示例
Dec 19 Python
使用pandas读取csv文件的指定列方法
Apr 21 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
Apr 27 Python
python实现傅里叶级数展开的实现
Jul 21 Python
python通用读取vcf文件的类(复制粘贴即可用)
Feb 29 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
Jun 12 Python
Python使用正则表达式实现爬虫数据抽取
Aug 17 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 21 Python
pytorch 两个GPU同时训练的解决方案
Jun 01 Python
Python之matplotlib绘制饼图
Apr 13 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
单位速度在实战中的运用
2020/03/04 星际争霸
php foreach 参数强制类型转换的问题
2010/12/10 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
2014/11/12 PHP
PHP线程的内存回收问题
2016/07/08 PHP
PHP解压ZIP文件到指定文件夹的方法
2016/11/17 PHP
Jquery 设置标题的自动翻转
2009/10/03 Javascript
JavaScript 基础知识 被自己遗忘的
2009/10/15 Javascript
jquery 学习笔记一
2010/04/07 Javascript
从零开始学习jQuery (十) jQueryUI常用功能实战
2011/02/23 Javascript
jQuery最佳实践完整篇
2011/08/20 Javascript
jquery.post用法示例代码
2014/01/03 Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
2015/07/01 Javascript
JS日期格式化之javascript Date format
2015/10/01 Javascript
Javascript实现图片不间断滚动的代码
2016/06/22 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
jQuery表单元素选择器代码实例
2017/02/06 Javascript
微信小程序 setData的使用方法详解
2017/04/20 Javascript
Node.Js中实现端口重用原理详解
2018/05/03 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
带你了解python装饰器
2017/06/15 Python
python3 unicode列表转换为中文的实例
2018/10/26 Python
实例介绍Python中整型
2019/02/11 Python
python3爬取torrent种子链接实例
2020/01/16 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
python的dict判断key是否存在的方法
2020/12/09 Python
使用Python爬取小姐姐图片(beautifulsoup法)
2021/02/11 Python
Wojas罗马尼亚网站:波兰皮鞋品牌
2018/11/01 全球购物
PHP面试题-$message和$$message的区别
2015/12/08 面试题
先进事迹演讲稿
2014/09/01 职场文书
水电维修专业推荐信
2014/09/06 职场文书
公司租房协议书范本
2014/10/08 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
2019年教师入党申请书
2019/06/27 职场文书