详解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实现新浪博客备份的方法
Apr 27 Python
利用python实现命令行有道词典的方法示例
Jan 31 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
Jan 15 Python
对Python 2.7 pandas 中的read_excel详解
May 04 Python
基于python log取对数详解
Jun 08 Python
python 接收处理外带的参数方法
Dec 03 Python
python制作图片缩略图
Apr 30 Python
Django后台admin的使用详解
Jul 08 Python
手把手教你pycharm专业版安装破解教程(linux版)
Sep 26 Python
PYTHON发送邮件YAGMAIL的简单实现解析
Oct 28 Python
使用python切片实现二维数组复制示例
Nov 26 Python
Python可以实现栈的结构吗
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 chr() ord()中文截取乱码问题解决方法
2008/09/08 PHP
解决cPanel无法安装php5.2.17
2014/06/22 PHP
Yii2设置默认控制器的两种方法
2017/05/19 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
基于win2003虚拟机中apache服务器的访问
2017/08/01 PHP
一个选择最快的服务器转向代码
2009/04/27 Javascript
ExtJS Ext.MessageBox.alert()弹出对话框详解
2010/04/02 Javascript
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
jQuery阻止冒泡和HTML默认操作
2010/11/17 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
2017/03/02 Javascript
详解vue+vueRouter+webpack的简单实例
2017/06/17 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
vue mintui-Loadmore结合实现下拉刷新和上拉加载示例
2017/10/12 Javascript
vue-cli常用设置总结
2018/02/24 Javascript
微信小程序实现图片上传放大预览删除代码
2020/06/28 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
JS中队列和双端队列实现及应用详解
2020/09/29 Javascript
[02:57]DOTA2英雄基础教程 风行者
2014/01/16 DOTA
[38:39]完美世界DOTA2联赛循环赛 IO vs GXR BO2第二场 11.04
2020/11/05 DOTA
python的unittest测试类代码实例
2017/12/07 Python
Python读写docx文件的方法
2018/05/08 Python
对pandas中Series的map函数详解
2018/07/25 Python
python django生成迁移文件的实例
2019/08/31 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
Veronica Beard官网:在酷、经典和别致之间找到了平衡
2018/01/11 全球购物
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
时尚孕妇装:HATCH Collection
2019/09/24 全球购物
工作中个人的自我评价
2013/12/31 职场文书
高三自我评价
2014/02/01 职场文书
三项教育活动实施方案
2014/03/30 职场文书
领导干部作风建设工作总结
2014/10/23 职场文书
客户付款通知书
2015/04/23 职场文书
python垃圾回收机制原理分析
2022/04/13 Python
解决MySQL报“too many connections“错误
2022/04/19 MySQL
JS函数式编程实现XDM一
2022/06/16 Javascript