详解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连接远程ftp服务器并列出目录下文件的方法
Apr 01 Python
Python实现定时任务
Feb 08 Python
用Python设计一个经典小游戏
May 15 Python
Python实现将doc转化pdf格式文档的方法
Jan 19 Python
Anaconda 离线安装 python 包的操作方法
Jun 11 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
Jan 08 Python
详解python运行三种方式
May 13 Python
对python3.4 字符串转16进制的实例详解
Jun 12 Python
python应用文件读取与登录注册功能
Sep 23 Python
Python -m参数原理及使用方法解析
Aug 21 Python
python如何写个俄罗斯方块
Nov 06 Python
pytorch训练神经网络爆内存的解决方案
May 22 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
从MySQL数据库表中取出随机数据的代码
2007/09/05 PHP
php preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
php获取网页内容方法总结
2008/12/04 PHP
php disk_free_space 返回目录可用空间
2010/05/10 PHP
PHP中替换换行符的几种方法小结
2012/10/15 PHP
比较简单的百度网盘文件直链PHP代码
2013/03/24 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
解决cPanel无法安装php5.2.17
2014/06/22 PHP
PHP用户注册邮件激活账户的实现代码
2017/05/31 PHP
初试jQuery EasyUI 使用介绍
2010/04/01 Javascript
Javascript实现滚动图片新闻的实例代码
2013/11/27 Javascript
javascript中文本框中输入法切换的问题
2013/12/10 Javascript
jQuery实现的登录浮动框效果代码
2015/09/26 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
Vue基于NUXT的SSR详解
2017/10/24 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
p5.js临摹旋转爱心
2019/10/23 Javascript
vue动态禁用控件绑定disable的例子
2019/10/28 Javascript
vue自定义指令实现仅支持输入数字和浮点型的示例
2019/10/30 Javascript
解决Mint-ui 框架Popup和Datetime Picker组件滚动穿透的问题
2020/11/04 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
django实现用户登陆功能详解
2017/12/11 Python
Python学习笔记之图片人脸检测识别实例教程
2019/03/06 Python
python3 实现函数写文件路径的正确方法
2019/11/27 Python
关于.NET, HTML的五个问题
2012/08/29 面试题
给医务人员表扬信
2014/01/12 职场文书
员工拓展培训方案
2014/02/15 职场文书
小学生读书活动总结
2014/06/30 职场文书
投标售后服务承诺书
2015/04/29 职场文书
2015年秋学期教研工作总结
2015/10/14 职场文书
Redis全局ID生成器的实现
2022/06/05 Redis