OpenCV读取图像时按照BGR的顺序HWC排列,PyTorch按照RGB的顺序CHW排列

OpenCV读取RGB图像

在OpenCV中,读取的图片默认是HWC格式,即按照高度、宽度和通道数的顺序排列图像尺寸的格式。我们看最后一个维度是C,因此最小颗粒度是C。

例如,一张形状为256×256×3的RGB图像,在OpenCV中读取后的格式为[256, 256, 3],其中最后一个维度表示图像的通道数。在OpenCV中,可以通过cv2.imread()函数读取图片,该函数的返回值是一个NumPy数组,表示读取的图像像素值。

需要注意的是,OpenCV读取的图像像素值是按照BGR顺序排列的,而不是RGB顺序。因此,如果需要将OpenCV读取的图像转换为RGB顺序,可以使用cv2.cvtColor()函数进行转换。

OpenCV读取一张RGB图像时,它会将像素数据按照BGR的顺序排列,对于一张3×3的RGB图像,其像素信息在内存中的排列方式如下所示:

[
[[B G R] [B G R] [B G R]],
[[B G R] [B G R] [B G R]],
[[B G R] [B G R] [B G R]], ]

可知,每一个像素点都由三个值组成,分别表示该像素点在蓝色、绿色和红色通道中的颜色值,而整张图像的像素数据则按照BGR的顺序排列。

在PyTorch中读取RGB图像

PyTorch接收的RGB图像通常采用CHW格式。在PyTorch中,RGB图像的像素值通常采用浮点数的形式表示,并且像素值的范围通常是[0, 1]或[-1, 1]。

一般pytorch中的tensor,即网络的输入,要转换为plane的格式,即rrrgggbbb。

[
[[R R R] [R R R] [R R R]],
[[G G G] [G G G] [G G G]],
[[B B B] [B B B] [B B B]], ]

在PyTorch中,模型接收的RGB图像通常采用CHW格式,即按照通道数、高度和宽度的顺序排列像素信息的方式。

具体来说,假设某个像素点的坐标为(i, j),其在内存中的存储位置可以表示为:

offset = i * W * C + j * C

其中,i表示该像素点在第二维中的位置,j表示该像素点在第三维中的位置,C表示通道数,W表示宽度。这个公式可以计算出该像素点在内存中的偏移量,从而可以访问该像素点的RGB值。

实验

1 生成一张图片

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt# 用随机数模拟一张图像
image = np.random.randint(256, size=60)
image = image.reshape((5,4,3))
image_hwc = np.uint8(image)# 展示图像
image_show = Image.fromarray(image_hwc)
plt.imshow(image_show)
plt.show()# 打印图像像素值,[h, w, c]格式
print(image_hwc)# 打印像素值,[c, h, w]格式
image_chw = np.transpose(image_hwc, (2,0,1))
print(image_chw)

以上代码模拟生成的图像如下图所示,图中有5行4列总共20个像素。
在这里插入图片描述

上图的所有像素及其像素值如下图所示,[h, w, c]格式。可以看出,最里层的括号内为单个像素在三个通道上的像素值。

我们看这种维度的一个方法是:看最后一个维度的含义,[h,w,c]最后一个维度是3,因此意味着最小的颗粒度维度是3。

在这里插入图片描述
如果以[c, h, w]格式表示的话,应该是下图这样的:
看最后一个维度的含义,[c,h,w]最后一个维度是w(我们实验中是4),因此意味着最小的颗粒度维度是4。

我们想象,一束光通过三棱镜后分解为彩色光,我们取出其中一个频段的数据,把这个频段的数据进行二维排列,就是该通道的情况。

在这里插入图片描述

2 CHW和HWC的本质

本质是一个规范,排列多维度的数据的规范,换句话说,就是定义了一个数据类型的结构体。

转换过程

  1. 其实数据可以看做是一堆无序的数据,轴的存在让这些数据按照一定层级及次序排布
  2. 转换前的数据是这样排布的,先按照图像高分成3堆,对这3堆的每一堆按照图像图像宽分2堆,分好的2堆分别按照通道数分成3堆
  3. 转换后的数据排布顺序变了,它先按照通道数分成3堆,分好的3堆各自按照图像高分成3堆,再按照图像宽分成2堆。

在这里插入图片描述

参考

https://blog.csdn.net/hh1357102/article/details/130622666
https://zhuanlan.zhihu.com/p/476310426

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

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

相关文章

IDEA 启动 java web 老项目

背景:一套 java web 老代码,使用 eclipse 工具开发。内网,无 eclipse 开发工具,只有 IDEA。 代码目录结构如下: demo/.settings/* demo/src/com/demo/controller/* demo/webapp/js/* demo/webapp/jsp/* demo/webapp/M…

MySQL学习笔记18

MySQL的备份与恢复: 制定数据库备份策略进行备份,并且把数据导入到测试环境。 核心技术: 1)掌握MySQL的备份工具使用及各自特点; 2)熟悉Shell脚本; 3)熟悉MySQL数据的导入导出&a…

数据计算-第15届蓝桥杯第一次STEMA测评Scratch真题精选

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第154讲。 第15届蓝桥杯第1次STEMA测评已于2023年8月20日落下帷幕,编程题一共有6题,分别如下&a…

浅谈安科瑞ADL系列导轨式多功能仪表在迪拜楼宇EMS中的应用

摘要:用户端消耗着整个电网80%的电能,用户端智能化用电管理对用户可靠、安全、节约用电有十分重要的意义。构建智能用电服务体系,推广用户端智能多功能仪表、智能用电管理终端等设备用电管理解决方案,实现电网与用户的双向良性互动…

计算机网络 - 应用层

计算机网络 - 应用层 计算机网络 - 应用层 域名系统文件传送协议动态主机配置协议远程登录协议电子邮件协议 1. SMTP2. POP33. IMAP 常用端口Web 页面请求过程 1. DHCP 配置主机信息2. ARP 解析 MAC 地址3. DNS 解析域名4. HTTP 请求页面 域名系统 DNS 是一个分布式数据库&a…

ChatGPT批量写作文章软件

什么是ChatGPT批量写作文章。简单来说,它是一种使用ChatGPT技术的方法,可以帮助您批量生成各种类型的文章和内容。无论您是需要新闻报道、博客文章、产品描述、社交媒体帖子还是其他类型的内容,ChatGPT都能满足您的需求。它可以在极短的时间内…

BabelEdit 5.0.1 Crack

BabelEdit加强软件本地化。BabelEdit 是处理 json、yaml、php、arb、vue、properties、resx 或 xliff 翻译文件的可靠解决方案。 旨在使开发过程更加简化和高效。 下载BabelEdit 5.0.0 对于Windows 也适用于macOS 和 Linux BabelEdit - 适用于 Web 和应用程序的翻译编辑器 (…

关键点检测 HRNet网络详解笔记

关键点检测 HRNet网络详解笔记 0、COCO数据集百度云下载地址1、背景介绍2、HRNet网络结构3、预测结果(heatmap)的可视化3、COCO数据集中标注的17个关键点4、损失的计算5、评价准则6、数据增强7、模型训练 论文名称: Deep High-Resolution Rep…

企业级磁盘阵列存储系统由硬到软全析

企业级磁盘阵列是由一组设备构成的存储系统,主要包括两种类型的设备,分别是控制器和扩展柜,其中控制器只有一台,扩展柜可以没有,也可以有多台。在EMC的Unity中分别称为DPE(Disk Processor Enclosure)和DAE(Disk Array Enclosure),在华为的OceanStor里面称为控制框和硬…

聚观早报 | 中国队拿下亚运会电竞项目首金;B站发布68部国创片单

【聚观365】9月28日消息 中国队拿下亚运会电竞项目首金 B站发布68部国创片单 支付宝持续加大流量开放 起点有声书《宿命之环》等大作陆续上线 方程豹豹5详细配置公开 中国队拿下亚运会电竞项目首金 杭州2022年第19届亚运会官网发布公告称,在昨日的杭州第19届亚…

ubuntu20.04下源码编译colmap

由于稠密重建需要CUDA,因此先安装CUDA,我使用的是3050GPU,nvidia-smi显示最高支持CUDA11.4。 不要用sudo apt安装,版本较低,30系显卡建议安装CUDA11.0以上,这里安装了11.1版本。 下载: cuda_1…

分享从零开始学习网络设备配置--任务3.5 使用静态路由实现网络连通

任务描述 某公司规模较小,该公司的网络管理员经过考虑,决定在公司的路由器、交换机与运营商路由器之间使用静态路由,实现网络的互连。 静态路由一般适用于比较简单的网络环境。在这样的环境中,网络管理员应非常清楚地了解网络…

网络爬虫——urllib(1)

前言🍭 ❤️❤️❤️网络爬虫专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ 前篇简单介绍了什么是网络爬虫及相关概念,这篇开始讲解爬虫中的第一个库——urllib。 urllib🍭 …

PPT系统化学习 - 第1天

文章目录 更改PPT主题更改最大撤回次数自动保存禁止PPT压缩图片字体嵌入PPTPPT导出为PDFPPT导出为图片PPT导出为图片型幻灯片PPT导出成视频添加参考线设置默认字体设置默认形状建立模板、保存模板、使用模板建立模板保存模板使用模板 更改PPT主题 更改PPT的主题: 夜…

图像处理: ImageKit.NET 3.0.10704 Crack

关于 ImageKit.NET3 100% 原生 .NET 图像处理组件。 ImageKit.NET 可让您快速轻松地向 .NET 应用程序添加图像处理功能。从 TWAIN 扫描仪和数码相机检索图像;加载和保存多种格式的图像文件;对图像应用图像滤镜和变换;在显示屏、平移窗口或缩略…

基于springboot+vue的新闻推荐系统

目录 前言 一、技术栈 二、系统功能介绍 管理员模块的实现 用户信息管理 排行榜管理 新闻信息管理 用户模块的实现 首页信息 新闻信息 我的收藏 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息互联网购物的飞速发展,国内放开了自…

基于springboot实现二手交易平台管理系统演示【项目源码】分享

基于springboot实现二手交易平台管理系统演示 java简介 Java语言是在二十世纪末由Sun公司发布的,而且公开源代码,这一优点吸引了许多世界各地优秀的编程爱好者,也使得他们开发出当时一款又一款经典好玩的小游戏。Java语言是纯面向对象语言之…

多维时序 | MATLAB实现WOA-CNN-GRU-Attention多变量时间序列预测(SE注意力机制)

多维时序 | MATLAB实现WOA-CNN-GRU-Attention多变量时间序列预测(SE注意力机制) 目录 多维时序 | MATLAB实现WOA-CNN-GRU-Attention多变量时间序列预测(SE注意力机制)预测效果基本描述模型描述程序设计参考资料 预测效果 基本描述…

stable diffusion和gpt4-free快速运行

这是一个快速搭建环境并运行的教程 stable diffusion快速运行gpt快速运行 包含已经搭建好的环境和指令,代码等运行所需。安装好系统必备anaconda、conda即可运行。 stable diffusion快速运行 github: AUTOMATIC1111/稳定扩散网络UI:稳定扩散网页用户界…

InnoDB的BufferPool

title: “InnoDB的BufferPool” createTime: 2022-03-06T15:52:4108:00 updateTime: 2022-03-06T15:52:4108:00 draft: false author: “ggball” tags: [“mysql”] categories: [“db”] description: “” InnoDB的BufferPool 为什么需要缓存? 因为存储引擎需…