Pillow(PIL)和OpenCV读取数据的区别

这篇具有很好参考价值的文章主要介绍了Pillow(PIL)和OpenCV读取数据的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、读取图片代码示例

二、两者区别

1.存储格式不同

2.通道顺序不同


前言

在处理计算机视觉任务过程中,经常会用到Pillow和Opencv来处理数据,本文介绍这两者在处理图片时的不同。


一、读取图片代码示例

Pillow (PIL):Pillow 是一个流行的 Python 图像处理库,可以用来打开、处理和保存多种图像格式。您可以使用以下代码来读取图片:

from PIL import Image

# 打开图像文件
image = Image.open('image.jpg')

# 显示图像
image.show()

 OpenCV:OpenCV 是一个计算机视觉库,支持多种图像和视频处理任务。您可以使用以下代码来读取图像:

import cv2

# 读取图像文件
image = cv2.imread('image.jpg')

# 显示图像
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

二、两者区别

1.存储格式不同

Pillow将图像以PIL(Python Imaging Library)的Image对象的形式加载到内存中。OpenCV将图像以NumPy数组的形式加载到内存中。

    import cv2
    path=r'E:\cv_code\ZYH\SenseEarth2020-ChangeDetection-master\data\dataset\train\im1\00003.png'
    img1=cv2.imread(path)
    img2=Image.open(path)
    print(img1)
    print("**************")
    print(img2)

输出:

pillow和opencv区别,pillow,opencv,人工智能 通过numpy.array()将PIL数据处理为Numpy数组。

2.通道顺序不同

OpenCV(cv2)在读取图像数据时通常不会按照CHW(通道、高度、宽度)的顺序排列数据,而是按照HWC(高度、宽度、通道)的顺序排列数据。这意味着数据数组的维度通常是(height, width, channels),而不是(channels, height, width)。例如,如果您使用OpenCV读取一张彩色图像,通道顺序通常是BGR(蓝绿红),并且数据的维度将是(height, width, 3),其中3表示三个颜色通道。

Pillow(PIL)库在处理图像时也按照HWC(高度、宽度、通道)的顺序排列数据,而不是CHW(通道、高度、宽度)的顺序。这意味着使用Pillow库读取图像后,数据的维度通常是(height, width, channels)。例如,如果您使用Pillow打开一张彩色图像,通道顺序通常是RGB(红绿蓝),并且数据的维度将是(height, width, 3),其中3表示三个颜色通道。

    import cv2
    path=r'E:\cv_code\ZYH\SenseEarth2020-ChangeDetection-master\data\dataset\train\im1\00003.png'
    img1=cv2.imread(path)
    img2=Image.open(path)
    img3=np.array(img2)
    print(img1)
    print("**************")
    # print(img1.transpose(2,0,1).shape)
    # print(img2)
    print(img3)

输出: 

[[[ 48  62  55]
  [ 53  68  58]
  [ 54  68  61]
  ...
  [132 134 129]
  [136 136 131]
  [134 136 131]]

 [[ 43  56  46]
  [ 46  61  51]
  [ 48  63  53]
  ...
  [133 133 128]
  [135 135 130]
  [136 136 131]]

 [[ 48  61  51]
  [ 49  64  54]
  [ 50  65  55]
  ...
  [132 132 127]
  [134 134 129]
  [135 135 130]]

 ...

 [[ 59  72  77]
  [ 60  73  78]
  [ 60  73  78]
  ...
  [110 117 120]
  [108 115 118]
  [108 115 118]]

 [[ 59  72  77]
  [ 59  72  77]
  [ 59  72  77]
  ...
  [108 115 118]
  [105 112 115]
  [103 110 113]]

 [[ 58  71  76]
  [ 58  71  76]
  [ 59  72  77]
  ...
  [109 116 119]
  [104 111 114]
  [103 110 113]]]
**************
[[[ 55  62  48]
  [ 58  68  53]
  [ 61  68  54]
  ...
  [129 134 132]
  [131 136 136]
  [131 136 134]]

 [[ 46  56  43]
  [ 51  61  46]
  [ 53  63  48]
  ...
  [128 133 133]
  [130 135 135]
  [131 136 136]]

 [[ 51  61  48]
  [ 54  64  49]
  [ 55  65  50]
  ...
  [127 132 132]
  [129 134 134]
  [130 135 135]]

 ...

 [[ 77  72  59]
  [ 78  73  60]
  [ 78  73  60]
  ...
  [120 117 110]
  [118 115 108]
  [118 115 108]]

 [[ 77  72  59]
  [ 77  72  59]
  [ 77  72  59]
  ...
  [118 115 108]
  [115 112 105]
  [113 110 103]]

 [[ 76  71  58]
  [ 76  71  58]
  [ 77  72  59]
  ...
  [119 116 109]
  [114 111 104]
  [113 110 103]]]

CHW通道顺序通常更常见于深度学习框架,如PyTorch和TensorFlow,因为它们通常期望输入数据的通道维度在前面。如果您希望将OpenCV读取的图像数据转换为CHW顺序,您可以使用NumPy来进行维度的重新排列。例如,在Python中,您可以这样做:文章来源地址https://www.toymoban.com/news/detail-859211.html

import cv2
import numpy as np

# 读取图像
image = cv2.imread('image.jpg')

# 将数据从HWC转换为CHW
image_chw = np.transpose(image, (2, 0, 1))

到了这里,关于Pillow(PIL)和OpenCV读取数据的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【python 的各种模块】(9) 在python使用PIL( 即pillow模块 ) 修改图片

    目录 1 导入PIL模块(pillow) 1.1 PIL的全称:Python Imaging Library 1.2 导入PIL模块 1.2.1 可用的导入形式 1.2.2 常用的导入形式 1.2.3 PIL下面的常用子模块 2 PIL.Image的方法 (读入,生成和显示图片) 2.1 用 PIL.Image.open() 可以读入图片 2.1.1 基础语法 PIL.Image.open(path) 2.1.2 PIL.Image.open() 方法是

    2024年01月16日
    浏览(43)
  • Python与Pytorch系列(二) 本文(1.8万字) | 解析Opencv, Matplotlib, PIL | 三者之间的转换 | 三者对JPG和PNG读取和写入 |

    点击进入专栏: 《人工智能专栏》 Python与Python | 机器学习 | 深度学习 | 目标检测 | YOLOv5及其改进 | YOLOv8及其改进 | 关键知识点 | 各种工具教程 推荐网站 : OpenCV Matplotlib Pillow opencv的基本图像类型可以和numpy数组相互转化,因此可以直接调用 torch.from_numpy(img) 将图像转换成 t

    2024年02月03日
    浏览(69)
  • 【Python】Pillow 库入门

    PIL( Python Imaging Library)是 Python 的第三方图像处理库,由于其功能丰富,API 简洁易用,因此深受好评。 自 2011 年以来,由于 PIL 库更新缓慢,目前仅支持 Python 2.7 版本,这明显无法满足 Python3 版本的使用需求。于是一群 Python 社区的志愿者(主要贡献者:Alex Clark 和 Contribu

    2024年02月08日
    浏览(32)
  • Pillow模块——生成随机验证码

    2024年02月03日
    浏览(42)
  • Python pillow扩展库图像编程

                   

    2024年02月14日
    浏览(35)
  • 【python使用 Pillow 库】缩小|放大图片

    当我们处理图像时,有时候需要调整图像的大小以适应特定的需求。本文将介绍如何使用 Python 的 PIL 库(Pillow)来调整图像的大小,并保存调整后的图像。 在开始之前,我们需要安装 Pillow 库。可以使用以下命令来安装 Pillow: 下面是调整图像大小的示例代码: 代码解析如下

    2024年02月10日
    浏览(44)
  • 【亲测】python 安装 pillow报错 如何处理

    今天在新系统上 安装pillow库,提示错误: WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by \\\'SSLError(SSLEOFError(8, \\\'EOF occurred in violation of protocol (_ssl.c:997)\\\'))\\\': /simple/pillow/ 原因: 警告提示表明在安装Pillow库时遇到了SSL连接错误。这可能是由于

    2024年02月07日
    浏览(30)
  • 图像处理工具包Pillow的使用分享

    Pillow 是 Python 中一个流行的图像处理库,它是 PIL(Python Imaging Library)的一个友好的分支版本。Pillow 提供了许多功能,使得图像处理变得容易和方便。下面是一些基本用法和示例: 安装 Pillow 首先,你需要安装 Pillow。这可以通过 pip 命令轻松完成: 基本操作 1. 导入图像 2. 显

    2024年01月21日
    浏览(44)
  • 使用wxPython和pillow开发拼图小游戏(四)

           上一篇介绍了使用本地图片来初始化游戏的方法,通过前边三篇,该小游戏的主要内容差不多介绍完了,最后这一篇来介绍下游戏用时的计算、重置游戏和关闭窗口事件处理 游戏用时的计算        对于游戏用时的记录,看过前几篇的小伙伴可能也发现了,这里主要

    2024年02月16日
    浏览(34)
  • 使用wxPython和pillow开发拼图小游戏(一)

    刚学习python,心血来潮,使用wxPython和pillow开了一个简单的拼图小游戏,大家分享一下 wxPython是Python语言的一套优秀的GUI图形库,在此项目里主要用来开发GUI客户页面;Pillow是一个非常好用的图像处理库,在此项目中主要用来对图片进行填充、切割、保存等操作。 项目初始化

    2024年02月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包