详解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之集成开发环境(IDE)
Sep 12 Python
Python基于回溯法子集树模板解决找零问题示例
Sep 11 Python
Python代码缩进和测试模块示例详解
May 07 Python
pyttsx3实现中文文字转语音的方法
Dec 24 Python
如何运行带参数的python脚本
Nov 15 Python
Python遍历字典方式就实例详解
Dec 28 Python
Python2与Python3的区别详解
Feb 09 Python
Python开发之pip安装及使用方法详解
Feb 21 Python
Python virtualenv虚拟环境实现过程解析
Apr 18 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
Nov 28 Python
python opencv人脸识别考勤系统的完整源码
Apr 26 Python
七个非常实用的Python工具包总结
Jun 15 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 has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
加载 Javascript 最佳实践
2011/10/30 Javascript
Firefox和IE兼容性问题及解决方法总结
2013/10/08 Javascript
jQuery中:selected选择器用法实例
2015/01/04 Javascript
JavaScript中的原型prototype属性使用详解
2015/06/05 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
Bootstrap table的使用方法
2016/11/02 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
Vuex的各个模块封装的实现
2020/06/05 Javascript
JS this关键字在ajax中使用出现问题解决方案
2020/07/17 Javascript
python处理圆角图片、圆形图片的例子
2014/04/25 Python
python通过百度地图API获取某地址的经纬度详解
2018/01/28 Python
解决django前后端分离csrf验证的问题
2019/02/03 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
2019/07/31 Python
python之yield和Generator深入解析
2019/09/18 Python
Python运行异常管理解决方案
2020/03/09 Python
纯CSS3+DIV实现小三角形边框效果的示例代码
2020/08/03 HTML / CSS
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
李宁官方网店:中国运动品牌
2017/11/02 全球购物
武汉世纪畅想数字传播有限公司.NET笔试题
2014/07/22 面试题
一套中级Java程序员笔试题
2015/01/14 面试题
大学生毕业的自我鉴定
2013/11/13 职场文书
青春无悔演讲稿
2014/05/08 职场文书
社会实践活动总结格式
2015/05/11 职场文书
2015年医院科室工作总结范文
2015/05/26 职场文书
Python爬虫数据的分类及json数据使用小结
2021/03/29 Python
基于flask实现五子棋小游戏
2021/05/25 Python
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技
Hive常用日期格式转换语法
2022/06/25 数据库