opencv和gdal的读写图片波段顺序问题

最近处理遥感影像总是不时听到 图片的波段错了,一开始不明就里,都是图片怎么就判断错了。

1、图像RGB波段顺序判断

后面和大家交流,基本上知道了一个判断标准。

一般来说,进入人眼的自然画面在计算机视觉中一般是rgb波段顺序表示的,人类的常识和自然感知与 rgb波段顺序的表示 是贴合的。

这个rgb波段图像和人类感知的贴合主要体现在,常规事物在人眼中的颜色和在图片中的颜色的一致性。比如说,一个自然界中的白色物体在rgb图像中呈现出来的也是白色,而如果你的图片是bgr波段保存的话,犹豫b波段代表blue颜色通道,即蓝色,蓝色处于第一个颜色波段,这时白色的物体在bgr图像中就会变成蓝色,这时,呈现出来的图像与自然界不一样,就会说波段错了。

如下是不同波段顺序呈现的图像效果:

这种现象并不是很好观察,特别是在这个图片泛滥的时代,我们早已不再对自然颜色有着明确的认知。而且当rgb图像的三个波段的数值所呈现的颜色不是那么鲜明时,变成bgr也不好判断。这里介绍一种判断方法。

就是找一个包含不同颜色的事物,具有鲜明对比性的,比如田径场,包含棕红色的橡胶跑道和绿色的草坪设施,你把图像的波段变成rgb或bgr就会发现明显的颜色变化。或者借助arcmap也可以修改图像的波段与常规事物颜色进行对比判断你的图片是否是正确的rgb波段

如下所示正常RGB图像和BGR图像:

正常的RGB图像
波段顺序为BGR的图像

2、opencv和gdal

opencv读取图片一般是bgr、hwc形式的,这个得理解一下,一般的图像是rgb波段的,也就是说,opencv读取图片时会把波段顺序调换一下,这个操作是不以输入图像是否是rgb格式为转移的。即使输入图像是bgr的,opencv读取也会进行波段顺序的变换进行读取,使bgr读进去变成rgb。所以在输出图片imwrite时要注意你当前的波段顺序是rgb还是bgr。如果读取后是bgr输出也是bgr,读取后变换成rgb输出也会变成rgb。

gdal也是同理,gdal用来读取处理遥感影像较多,因为具有处理地理坐标的功能。gdal与opencv不同,在图像波段数小于等于4时,gdal读取图片是 rgbn、chw形式的,所以明确读取的波段顺序后,才可以明确下一步处理的正确性。

其他pillow库、scikit-image库也是一样的使用,明确其对数据的处理方法,才能保证得到想要的图像处理结果。

3、transpose改变图像维度

其中,chwhwc是表示图像的维度的,分别c是波段数(通道数)channelh是图像的像素高度heightw是图像的像素宽度width,有时候需要转换图像的维度,比如hwc变成chw便于处理,这时可以使用 transpose(2,0,1) 来实现,transpose函数可以转换图像的维度,实际上就是换个方向摆放图像的数据,也可以说采用不同的坐标系来表示图像。

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

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

相关文章

Linux账号和权限管理

目录 前言 一、管理用户账号 1、Linux系统中用户账号类型 2、用户标识UID的分类 3、用户账号文件 4、用户账号的初始配置文件 5、用户账号的管理命令 5.1 useradd 5.2 usermod 5.3 passwd 5.4 userdel 二、管理组账号 1、Linux系统中组账号类型 2、组标识号GID的…

drf知识--07

回顾之视图层 # 两个视图基类: from rest_framework.views import APIView: 包装新的request、去除csrf认证、执行三大认证和处理全局异常 -as_view -dispatch -parser_class -render_class from rest_framewo…

5.8 Linux 服务实战

一、项目概述 项目名称:web 网站 项目时间:2022.7.18-2022.7.24 项目需求: ① 客户端使用kickstart部署4台虚拟机(centos7.9),所有服务器IP都为静态IP。② 客户端使用XShell的密钥登陆跳板机③ 所有后端服务器全部通过跳板机来…

Shell命令与Linux操作系统:深入理解其原理和功能(2/2)

在当今数字化时代,操作系统的安全性和稳定性对于个人用户和企业都至关重要。Linux,作为一个广泛使用的操作系统,其强大的文件权限系统是保护系统安全的核心机制之一。无论是在服务器管理、软件开发还是日常使用中,有效地管理和理解…

MongoDB文档操作

3.3 文档操作 3.1 文档介绍 文档的数据结构和 JSON 基本一样。 所有存储在集合中的数据都是 BSON 格式。 BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。 文档是一组键值(key-value)对(即 BSON),一个简单的文档例子如下&…

输入日期,计算当前日期是这一年中的第几天(涉及闰年问题)

一、应用到的知识:闰年问题,数组,for循环,命令行参数,atoi函数 1. 闰年问题: 闰年 是指该年有366日,即较平常年份多出一日。每400年就会有一次闰年;或者年份是4的倍数,但…

Flowable-升级为7.0.0.M2-第二节

目录 替换变化的类和配置把javax.servlet 替换为 jakarta.servlet修改redis的配置配置logging.level.org.springframework.boot.autoconfigureerror避免影响视听 替换变化的类和配置 把javax.servlet 替换为 jakarta.servlet import javax.servlet.ServletContext; import ja…

【Linux基础】9. 用户管理

文章目录 【 1. 用户基本管理 】1.1 useradd 添加用户1.2 passwd 更改用户密码1.3 su 切换用户1.4 userdel 删除用户 【 2. 用户的组 】2.1 more 查看系统所有组2.2 显示用户的组2.3 更改用户的组 【 3. 环境变量 】 【 1. 用户基本管理 】 1.1 useradd 添加用户 全称作用use…

【教程】使用ipagurd打包与混淆Cocos2d-x的Lua脚本

文章目录 摘要引言正文1. 准备工作2. 使用ipaguard处理Lua文件3. 运行ipagurd进行混淆代码加密具体步骤测试和配置阶段IPA 重签名操作步骤4. IPA重签名与发布 总结 摘要 本文将介绍如何使用ipagurd工具对Cocos2d-x中的Lua脚本进行打包与混淆,以及在iOS应用开发中的…

tekton 发布 kubernetes 应用

tekton 发布 kubernetes 应用 基于Kubernetes 服务部署 Tekton Pipeline 实例,部署完成后使用tekton来完成源码拉取、应用打包、镜像推送和应用部署。 本文实现一个 golang-helloworld 项目 CI/CD 的完整流程,具体包括以下步骤: 从 gitee…

css 超过一行/多行显示省略号... - 附示例

效果 1、超过一行 2、超过多行 - 以两行为例 二、示例代码 1、超过一行 margin: 20px; width: 50px; border: 1px solid red; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; 2、超过多行 - 以两行为例 margin: 20px; width: 50px; border: 1px solid r…

【日常聊聊】年度总结

🍎个人博客:个人主页 🏆个人专栏:日常聊聊 ⛳️ 功不唐捐,玉汝于成 目录 前言 博客创作的初衷: 学到的技能: Java知识的深度掌握: Spring框架的应用和实践: 前端技…

Unity so文件的问题

文章目录 问题在面板上无法显示子节点如何保存继承于so的类必须放置在单个脚本so类文件名和类名要一致 问题 最近自己在写一个行为树出现一些问题记录一下首先NodeTree肯定是so文件但是node可以是单纯的类,也可以是so。后来我发现只能是so 在面板上无法显示 第一…

linux 网络工具(二)

linux 网络工具 1. ip命令簇4.1 address4.2 link4.3 route4.4 rule 2. 其他常用命令2.1 ifup/ifdown2.2 配置主机名2.3 设置DNS服务器指向2.4 配置域名解析2.5 ss2.6 路由相关配置文件2.7 查看机器可用端口2.8 traceroute2.9 dhclient 1. ip命令簇 Linux的ip命令和ifconfig类似…

系列十七(面试)、请你谈谈RocketMQ的消息丢失问题

一、RocketMQ的消息丢失问题 1.1、概述 生产环境中为了保证服务的高可用,一般情况下都是采用集群的方式,RocketMQ也不例外,另外现在企业级的开发基本都是分布式微服务的模式,这就存在着跨网络传输数据的问题,而网络传…

【PTA】L1-016 验证身份(C++)

题目链接 : 题目要求: 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5&#xff0…

【七】【C语言\动态规划】最大子数组和、环形子数组的最大和、乘积最大子数组,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利…

python脚本抢各大平台大额优惠卷

文章目录 python脚本抢各大平台大额优惠卷写在前面准备阶段一、所需工具二、ChromeDriver下载教程 三、Seleuinm安装1、打开cmd,输入如下命令 开始抢券淘宝脚本京东抢购脚本 python脚本抢各大平台大额优惠卷 写在前面 当电商平台上演盛大的购物狂欢时,如…

SpringBoot3 基础特性

1. SpringApplication 1.1. 自定义 banner 类路径添加banner.txt或设置spring.banner.location就可以定制 banner推荐网站:Spring Boot banner 在线生成工具,制作下载英文 banner.txt,修改替换 banner.txt 文字实现自定义,个性化…

数据驱动与数据安全,自动驾驶看得见的门槛和看不见的天花板

作者 |田水 编辑 |德新 尽管心理有所准备,2023年智能驾驶赛道的内卷程度还是超出了大多数人的预期。 这一年,汽车价格战突然开打,主机厂将来自销售终端的价格压力,传导到下游智驾供应商,于是,市面上出现…