详解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中日志logging模块的性能及多进程详解
Jul 18 Python
高效测试用例组织算法pairwise之Python实现方法
Jul 19 Python
从CentOS安装完成到生成词云python的实例
Dec 01 Python
对python判断ip是否可达的实例详解
Jan 31 Python
深入解析python中的实例方法、类方法和静态方法
Mar 11 Python
Python opencv实现人眼/人脸识别以及实时打码处理
Apr 29 Python
Python实现密码薄文件读写操作
Dec 16 Python
pytorch 彩色图像转灰度图像实例
Jan 13 Python
Python实现AI自动抠图实例解析
Mar 05 Python
python将音频进行变速的操作方法
Apr 08 Python
scrapy中如何设置应用cookies的方法(3种)
Sep 22 Python
python 对象真假值的实例(哪些视为False)
Dec 11 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导出MySQL数据到Excel文件(fputcsv)
2011/07/03 PHP
php用正则表达式匹配中文实例详解
2013/11/06 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
php快速查找数据库中恶意代码的方法
2015/04/01 PHP
如何通过Linux命令行使用和运行PHP脚本
2015/07/29 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
js实现图片放大缩小功能后进行复杂排序的方法
2012/11/08 Javascript
js正文内容高亮效果的实现方法
2013/06/30 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
JS动态改变浏览器标题的方法
2016/04/06 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
angular学习之动态创建表单的方法
2018/12/07 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
js实现聊天对话框
2020/02/08 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
2020/08/06 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
使用cx_freeze把python打包exe示例
2014/01/24 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
scrapy头部修改的方法详解
2020/12/06 Python
python爬取豆瓣电影排行榜(requests)的示例代码
2021/02/18 Python
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
高二化学教学反思
2014/01/30 职场文书
五好党支部事迹材料
2014/02/06 职场文书
2014年教师节国旗下讲话稿
2014/09/10 职场文书
介绍信模板
2015/01/31 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
践行三严三实心得体会(2016推荐篇)
2016/01/06 职场文书
幼儿园小班教学反思
2016/03/03 职场文书
2016年中学法制宣传日活动总结
2016/04/01 职场文书
pandas中pd.groupby()的用法详解
2022/06/16 Python