skimage.io与matplotlib.image.imread读取图片的区别

        以前没用过matplotlib的读图方式,今天在别人的工程里看到这个用法,自己改写别人工程时,怎么都找不到问题,最后在最初,开始读图的时候发现了问题。


目录

🌷🌷1.对于png格式的3波段uint8图像

🍀🍀1.1 skimage.io读图

🌾🌾​​​​​​​1.2 matplotlib.image.imread读图

🍓🍓1.3 python代码

⭐skimage.io代码

⭐matplotlib.image.imread代码

🌷🌷2. 对于tif格式的4波段uint8图像

🍀🍀2.1skimage.io读图

🍓🍓2.2matplotlib.image.imread读图

🍓🍓2.3python代码

⭐skimage.io代码

⭐matplotlib.image.imread代码

🌷🌷3.总结

整理不易,欢迎一键三连!!!

送你们一条美丽的--分割线--


首先说区别:

🌷🌷​​​​​​​1.对于png格式的3波段uint8图像

🍀🍀1.1 skimage.io读图

        读取的就是uint8的[0,255]的3波段

🌾🌾​​​​​​​1.2 matplotlib.image.imread读图

        读取的就是float32的[0,1]的3波段,并且读到的像素值=原始像素值/255

🍓🍓1.3 python代码

        python代码展示如下,同一张图不同的方式读取,结果不同。

skimage.io代码

>>> from skimage import io
>>> a = io.imread('./samples/A/1_0.png')
>>> a
array([[[ 40,  61,  68],[ 57,  78,  85],[ 73,  94, 101],...,[ 92, 112, 119],[ 89, 109, 116],[ 75,  95, 102]],[[ 47,  68,  75],[ 62,  83,  90],[ 75,  96, 103],...,[ 91, 111, 118],[ 89, 109, 116],[ 77,  97, 104]],[[ 51,  72,  79],[ 64,  85,  92],[ 74,  95, 102],...,[ 80, 100, 107],[ 83, 103, 110],[ 73,  93, 100]],...,[[ 54,  67,  66],[ 66,  79,  78],[ 86,  96,  94],...,[135, 139, 142],[133, 137, 140],[132, 136, 139]],[[ 57,  70,  69],[ 71,  84,  83],[ 91, 101,  99],...,[132, 136, 138],[130, 134, 136],[129, 133, 135]],[[ 60,  73,  72],[ 77,  90,  89],[ 96, 106, 104],...,[127, 131, 133],[126, 130, 132],[126, 130, 132]]], dtype=uint8)

matplotlib.image.imread代码

>>> from matplotlib.image import imread
>>> b = imread('./samples/A/1_0.png')
>>> b
array([[[0.15686275, 0.23921569, 0.26666668],[0.22352941, 0.30588236, 0.33333334],[0.28627452, 0.36862746, 0.39607844],...,[0.36078432, 0.4392157 , 0.46666667],[0.34901962, 0.42745098, 0.45490196],[0.29411766, 0.37254903, 0.4       ]],[[0.18431373, 0.26666668, 0.29411766],[0.24313726, 0.3254902 , 0.3529412 ],[0.29411766, 0.3764706 , 0.40392157],...,[0.35686275, 0.43529412, 0.4627451 ],[0.34901962, 0.42745098, 0.45490196],[0.3019608 , 0.38039216, 0.40784314]],[[0.2       , 0.28235295, 0.30980393],[0.2509804 , 0.33333334, 0.36078432],[0.2901961 , 0.37254903, 0.4       ],...,[0.3137255 , 0.39215687, 0.41960785],[0.3254902 , 0.40392157, 0.43137255],[0.28627452, 0.3647059 , 0.39215687]],...,[[0.21176471, 0.2627451 , 0.25882354],[0.25882354, 0.30980393, 0.30588236],[0.3372549 , 0.3764706 , 0.36862746],...,[0.5294118 , 0.54509807, 0.5568628 ],[0.52156866, 0.5372549 , 0.54901963],[0.5176471 , 0.53333336, 0.54509807]],[[0.22352941, 0.27450982, 0.27058825],[0.2784314 , 0.32941177, 0.3254902 ],[0.35686275, 0.39607844, 0.3882353 ],...,[0.5176471 , 0.53333336, 0.5411765 ],[0.50980395, 0.5254902 , 0.53333336],[0.5058824 , 0.52156866, 0.5294118 ]],[[0.23529412, 0.28627452, 0.28235295],[0.3019608 , 0.3529412 , 0.34901962],[0.3764706 , 0.41568628, 0.40784314],...,[0.49803922, 0.5137255 , 0.52156866],[0.49411765, 0.50980395, 0.5176471 ],[0.49411765, 0.50980395, 0.5176471 ]]], dtype=float32)

🌷🌷2. 对于tif格式的4波段uint8图像

🍀🍀2.1skimage.io读图

        读取的就是uint8的[0,255]的4波段

🍓🍓2.2matplotlib.image.imread读图

        读取的也是uint8的[0,255]的4波段,二者读图结果一致

🍓🍓2.3python代码

        python代码展示如下,同一张图不同的方式读取,结果相同。

skimage.io代码

>>> from skimage import io
>>> a = io.imread('/home/zhouyuan/mnt/54.15.zhouyuan5/鄂尔多斯/cut_2019.tif')
>>> a.shape
(3179, 4834, 4)>>> import numpy as np
>>> np.unique(a)
array([  1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,92,  93,  94,  95,  96,  97,  98,  99, 100, 101, 102, 103, 104,105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,248, 249, 250, 251, 252, 253, 254], dtype=uint8)

matplotlib.image.imread代码

>>> from matplotlib.image import imread
>>> b = imread('2019.tif')
>>> b.shape
(3179, 4834, 4)
>>> np.unique(b)
array([  1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,92,  93,  94,  95,  96,  97,  98,  99, 100, 101, 102, 103, 104,105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,248, 249, 250, 251, 252, 253, 254], dtype=uint8)

🌷🌷3.总结

        这是因为matplotlib.image.imread读图有一个可选的参数format,用于读取数据的图像文件格式。如果没有给出,则从文件名中推断格式。如果无法推导出任何结果,则尝试使用png。

具体的推导情况有以下三种:

format

返回:

numpy.array

图像数据。返回的数组具有形状

  • (m,n)用于灰度图像。
  • (m,n,3)对于RGB图像。
  • (m,n,4)对于rgba图像。

 

整理不易,欢迎一键三连!!!

送你们一条美丽的--分割线--

🌷🌷🍀🍀🌾🌾🍓🍓🍂🍂🙋🙋🐸🐸🙋🙋💖💖🍌🍌🔔🔔🍉🍉🍭🍭🍋🍋🍇🍇🏆🏆📸📸⛵⛵⭐⭐🍎🍎👍👍🌷🌷

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/41247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Prometheus + Grafana 监控系统搭建使用指南-Nacos 接入 Prometheus 监控

Nacos 接入 Prometheus 监控 系列文章目录 Prometheus 的安装部署Grafana的安装部署Linux服务器接入Prometheus监控-Node Exporter 安装指南Prometheus 接入SpringBoot微服务监控Mysql 接入 Prometheus RocketMQ 接入Prometheus 监控ElasticSearch 接入 PrometheusNacos 接入…

在Android运行时切换Retrofit Base URL:简化开发环境与生产环境的切换

在运行时切换Retrofit Base URL:简化开发环境与生产环境的切换 在Android开发中,Retrofit是一个由Square开发的类型安全的HTTP客户端库。它为API认证和网络请求提供了一个强大的框架。然而,在开发过程中,我们常常需要在不同的环境(如开发环境和生产环境)之间切换Base UR…

解决刚申请下来的AWS EC2,无法用finalshell连接的问题

在AWS的命令页面创建一个root用户 切换到root 模式,输入密码 su root 不知道密码的可以使用一下命令来设置root用户的密码: su passwd root 再切换到root用户 su 修改配置文件 输入 vim /etc/ssh/sshd_config进入文件,键入’i’ ,进行…

YOLOv8改进 添加CVPR2024 PKINet中注意力机制CAAttention

一、PKINet论文 论文地址:2403.06258 (arxiv.org) 二、CAAttention结构 CAA(Context Anchor Attention)注意力模块是一种用于捕捉长距离上下文信息的并行模块。 在计算机视觉领域中,上下文信息是指与目标物体或任务相关的周围环境和语境信息。上下文信息可以帮助我们更好…

【码银送书第二十二期】《Python数据分析从入门到精通(第2版)》

💐大家好!我是码银~,欢迎关注💐: CSDN:码银 公众号:码银学编程 前言 🍀丛书说明:“软件开发视频大讲堂‘’丛书第1版于2008年8月出版,因其编写细腻、易学实用…

MySql主从同步延迟怎么办?

文章目录 什么是MySQL主从架构主从架构的组成工作原理主从复制的步骤主从架构的优点主从架构的缺点 什么是主从同步延迟为什么会导致主从延迟主从延时的排查和解决如果发现主从数据不一致怎么办? 我们常说的业务量越来越大,I/O访问频率过高,单…

中软国际加入龙蜥社区,促进“技术+生态”双向赋能

近日,中软国际有限公司(简称“中软国际”)签署了 CLA(Contributor License Agreement,贡献者许可协议),正式加入龙蜥社区(OpenAnolis)。 中软国际创立于 2000 年&#x…

两工种入选!广东省产教评技能生态链企业自主评价评价机构名单和可评价职业

7月4日,广州市人力资源和社会保障局发布《广东省产教评技能生态链企业自主评价评价机构名单和可评价职业(工种)范围》广东泰迪智能科技股份有限公司“计算机程序设计员”、“人工智能训练师”入选。 详细职业名称与等级如下: 计算…

小白 | Linux安装java8

一、更新包列表 sudo apt update 二、安装 Java 8 sudo apt install openjdk-8-jdk 安装问题 遇见Unable to locate package openjdk-8-jdk错误 1.添加 PPA 存储库 sudo add-apt-repository ppa:openjdk-r/ppa sudo apt update 2.重新尝试安装 sudo apt install openjdk8-jdk…

Zabbix动作与媒介

目录 前言 1. 动作的基本概念 2. 动作的常见用途 一. 环境准备 二. 创建动作 三. 添加媒介 前言 在 Zabbix 中,动作(Actions)用于在特定事件发生时执行一系列预定义的操作,比如发送通知、执行脚本等。动作通常与触发器&…

原神4.6单机版【完全无脑搭建】纯单机*稳定版*

版本介绍 版本3.7、4.0、4.0、4.4、4.5、4.6稳定版【过分追新并不稳,合理才完美】 独家原神,游戏内自带剧情任务,完美仿官,一比一完美复制! 已经拥有完美剧情、任务、副本、卡池、深渊、全物品、和全部功能和皮肤。 …

使用C++实现求职者和部门之间最大配对

某人力资源公司收到了m个合格的求职者的简历,要将他们分发给n个部门,每份简历符合一个或者几个部门的要求,但是每个人的简历最多送给k个部门,每个部门最多可以接受d份简历,如何实现求职者和部门之间的最大配对。使用了…

废水除铱,铱吸附树脂

废水除铱是环境保护和资源回收的重要任务之一。由于铱是贵金属之一,具有极高的经济价值,因此开发高效的废水除铱技术具有重要意义。以下是一些建议的废水除铱方法: 1. 沉淀法:向废水中添加适量的沉淀剂,如硫酸钠、氯…

redis学习(003 数据结构和通用命令)

黑马程序员Redis入门到实战教程,深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 总时长 42:48:00 共175P 此文章包含第8p-第p9的内容 文章目录 数据结构通用命令keys命令del命令exists命令expire命令ttl命令 数据结构 通用命令 help generic …

Visual Studio编译优化选项

目录 /O1 和 /O2 /Ox 内联函数 虚函数优化 代码重排 循环优化 链接时间优化 代码分割 数学优化 其他优化选项 在Visual Studio中,编译优化选项是用于提高程序性能的重要工具。编译器提供了多种优化级别和选项,可以根据不同的需要进行选择。 在…

光伏仿真系统不可忽视的功能:建模与仿真!

光伏仿真系统具备多种功能,能够支持对光伏发电系统进行深入研究和优化。为什么说建模与仿真功能是最不可忽视的呢?我们先来看看建模功能。 光伏仿真系统可以通过光伏插件或扩展程序,创建精确的光伏组件模型,包括光伏板、支架、逆变…

python输出个人自我介绍

需求 使用input()函数从键盘输入姓名、年龄,座右铭,并使用print()函数输出到控制台 nameinput(请输入您的姓名:) ageinput(请输入您的年龄:) mottoinput(请输入您的座右铭:) print(------------自我介绍------------…

5G 连接存在漏洞,移动设备易被绕过或受到 DoS 攻击

无线服务提供商优先考虑正常运行时间和延迟时间,有时以牺牲安全性为代价,允许攻击者利用这一漏洞窃取数据,甚至更糟。 由于 5G 技术存在漏洞,移动设备面临着数据被肆意窃取和拒绝服务的风险。 在即将于拉斯维加斯举行的「黑帽 2…

Pandas 入门 15 题

Pandas 入门 15 题 1. 相关知识点1.1 修改DataFrame列名1.2 获取行列数1.3 显示前n行1.4 条件数据选取值1.5 创建新列1.6 删去重复的行1.7 删除空值的数据1.9 修改列名1.10 修改数据类型1.11 填充缺失值1.12 数据上下合并1.13 pivot_table透视表的使用1.14 melt透视表的使用1.1…

C#桌面应用开发:番茄定时器

C#桌面应用开发:番茄定时器 1、环境搭建和工程创建: 步骤一:安装visual studio2022 步骤二:新建工程 2、制作窗体部件 *踩过的坑: (1)找不到工具箱控件,现象如下:…