当前位置: 首页 > news >正文

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

相关文章:

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

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

基于安卓android微信小程序的校园维修平台

项目介绍 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数据库来完成对系统的设计。整…...

mysql面试题16:说说分库与分表的设计?常用的分库分表中间件有哪些?分库分表可能遇到的问题有哪些?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说说分库与分表的设计? 在MySQL中,分库与分表是常用的数据库水平扩展技术,可以提高数据库的吞吐量和扩展性。下面将具体讲解MySQL中分库与分表…...

AlexNet网络复现

1. 引言 在现代计算机视觉领域,深度学习已经成为了一个核心技术,其影响力远超过了传统的图像处理方法。但深度学习,特别是卷积神经网络(CNN)在计算机视觉的主导地位并不是从一开始就有的。在2012年之前,计…...

pytorch模型量化和移植安卓详细教程

十一下雨,在家撸模型,希望对pytorch模型进行轻量化,间断摸索了几天,效果不错,做个总结分享出来。 量化是一种常见的技术,人们使用它来使模型在推断时运行更快,具有更低的内存占用和更低的功耗,而无需更改模型架构。在这篇博客文章中,我们将简要介绍量化是什么以及如何…...

C++(List)

本节目标: 1.list介绍及使用 2.list深度剖析及模拟实现 3.list和vector对比 1.list介绍及使用 1.1list介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 2. list的底层是双向链表结构,…...

分布式架构篇

1、微服务 微服务架构风格,就像是把一个单独的应用程序开发为一套小服务,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是 HTTP API。这些服务围绕业务能力来构建,并通过完全自动化部署机制来独立部署。这些…...

ros编译报错-- Could NOT find ros_ethercat_eml (missing: ros_ethercat_eml_DIR)

– Could NOT find ros_ethercat_eml (missing: ros_ethercat_eml_DIR) – Could not find the required component ‘ros_ethercat_eml’. The following CMake error indicates that you either need to install the package with the same name or change your environment …...

VD6283TX环境光传感器驱动开发(3)----测试闪烁频率代码

VD6283TX环境光传感器驱动开发----3.测试闪烁频率代码 概述视频教学样品申请源码下载参考代码开发板设置测试结果 概述 ST提供了6283A1_AnalogFlicker代码在X-NUCLEO-6283A1获取闪烁频率,同时移植到VD6283TX-SATEL。 闪烁频率提取主要用于检测光源的闪烁频率&#…...

透明度和透明贴图制作玻璃水杯

1、什么是透明度 模型透明度是指一个物体或模型在呈现时的透明程度。它决定了物体在渲染时,是否显示其后面的物体或背景。 在图形渲染中,透明度通常以0到1之间的值表示。值为0表示完全透明,即物体不可见,背景或其他物体完全穿透…...

【前后缀技巧】2022牛客多校3 A

登录—专业IT笔试面试备考平台_牛客网 题意: 思路: 这种是典中典中典,对于gcd,背包问题都是一样的处理方式 预处理出前缀lca和后缀lca,枚举哪个消失即可,可以统计方案数 Code: #include &l…...

Ae 效果:CC Page Turn

扭曲/CC Page Turn Distort/CC Page Turn CC Page Turn (CC 翻页)主要用于模拟书页翻动的效果。通过使用该效果,用户可以创建出像书页或杂志页面翻动的视觉效果,增强影片的交互性和视觉吸引力。 ◆ ◆ ◆ 效果属性说明 Contro…...

【数据仓库设计基础(四)】数据仓库实施步骤

文章目录 1.定义范围2.确定需求3.逻辑设计1)建立需要的数据列表2)识别数据源3)制作实体关系图 4.物理设计1)性能优化2)数仓的拓展性 5.装载数据6.…...

GridSearchCV 工具介绍

目录 1、定义 2、工作流程 3、示例代码 4、总结 1、定义 GridSearchCV 是一个用于超参数调优的工具,它在给定的参数网格中执行交叉验证,以确定最佳的参数组合。通过穷举搜索(exhaustive search)来寻找最佳参数,即…...

基于 SSM 框架的旅游文化管理平台

本系统采用基于JAVA语言实现、架构模式选择B/S架构,Tomcat7.0及以上作为运行服务器支持,基于JAVA等主要技术和框架设计,idea作为开发环境,数据库采用MYSQL5.7以上。 开发环境: JDK版本:JDK1.8 服务器&…...

chatgpt技术总结(包括transformer,注意力机制,迁移学习,Ray,TensorFlow,Pytorch)

最近研读了一些技术大咖对chatgpt的技术研讨,结合自己的一些浅见,进行些许探讨。 我们惊讶的发现,chatgpt所使用的技术并没有惊天地泣鬼神的创新,它只是将过去的技术潜能结合现在的硬件最大化的发挥出来,也正因如此&am…...

vertx的学习总结4

一、异步数据和事件流 1.为什么流是事件之上的一个有用的抽象? 2.什么是背压,为什么它是异步生产者和消费者的基础? 3.如何从流解析协议数据? 1. 答:因为它能够将连续的事件序列化并按照顺序进行处理。通过将事件…...

SpringBoot心旅售票管理系统

本心旅售票管理系统采用基于JAVA语言实现、架构模式选择B/S架构,Tomcat7.0及以上作为运行服务器支持,基于JAVA、springboot、vue等主要技术和框架设计,idea作为开发环境,数据库采用MYSQL5.7以上。 采用技术: SpringBootVueMySQL...

CUDA C编程权威指南:1-基于CUDA的异构并行计算

什么是CUDA?CUDA(Compute Unified Device Architecture,统一计算设备架构)是NVIDIA(英伟达)提出的并行计算架构,结合了CPU和GPU的优点,主要用来处理密集型及并行计算。什么是异构计算&#xff1…...

R语言易错点(持续更新中~~)

1.R向量元素的索引(下标)是从1开始的&#xff0c;而非0 >x [1] 1 2 4>x[3] [1] 4 2.[]和[ [ ] ] mylist<-list(stud.id1234,stud.name"Tom",stud.marksc(10,3,14,25,19)) > mylist $stud.id [1] 1234$stud.name [1] "Tom"$stud.marks [1] 10…...

基于本地大模型与Playwright的隐私优先求职自动化助手RedClaw实践

1. 项目概述&#xff1a;一个真正为你掌控的本地化求职AI助手在求职季&#xff0c;我们常常面临一个两难困境&#xff1a;一方面&#xff0c;海投简历耗时耗力&#xff0c;重复填写那些大同小异的在线申请表让人筋疲力尽&#xff1b;另一方面&#xff0c;市面上一些所谓的“自动…...

Windows 10/11终极指南:如何快速解决PL2303驱动兼容性问题

Windows 10/11终极指南&#xff1a;如何快速解决PL2303驱动兼容性问题 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 还在为Windows 10/11系统上的PL2303串口设备无法…...

FreeRTOS日志任务设计----LogTask 日志任务

&#x1f3ac; 渡水无言&#xff1a;个人主页渡水无言 ❄专栏传送门&#xff1a; 《linux专栏》《嵌入式linux驱动开发》《linux系统移植专栏》 ❄专栏传送门&#xff1a; 《freertos专栏》 《STM32 HAL库专栏》《linux裸机开发专栏》 ❄专栏传送门&#xff1a;《产品测评专栏》…...

刚续费Basic的你务必立刻阅读:官方未公告的API调用封禁、历史图库自动归档及导出格式缩水清单

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney Basic计划的核心定位与续费陷阱警示 Midjourney Basic 计划面向轻量级创作者&#xff0c;提供每月 200 张图像生成额度、标准排队优先级及基础风格控制能力。其核心定位并非长期主力生产工具…...

Java 100 天进阶之路 | 从入门到上岗就业 · 完整目录导航

&#x1f4da; Java 100 天进阶之路 | 从入门到上岗就业 完整目录导航 不背八股文&#xff0c;不堆概念。44篇基础56篇进阶&#xff0c;100天助你达到Java就业水平&#xff0c;从容面对技术面试。 零差评Java教程&#xff0c;从入门到微服务&#xff0c;每篇都有代码、避坑和面…...

基于ChatGPT与Next.js的React组件自然语言生成器开发实战

1. 项目概述&#xff1a;一个由ChatGPT驱动的React组件实时生成器 作为一名在React生态里摸爬滚打了多年的前端开发者&#xff0c;我深知从零开始构建一个UI组件&#xff0c;尤其是那些需要反复调整样式和交互逻辑的组件&#xff0c;是多么耗时耗力。我们常常在Figma里画好了设…...

【鸿蒙PC三方库移植适配框架解读系列】第五篇:完整流程图与角色职责

系列导读&#xff1a;本文是 Lycium 适配系列的第五篇&#xff0c;通过一张完整的流程图展示适配者、Lycium 框架和 OHOS SDK 三者之间的交互关系&#xff0c;并总结各环节的角色职责。 欢迎加入【开源鸿蒙PC社区】&#xff0c;一起共建鸿蒙化C/C三方库生态。 前言 项目说明m…...

两级宽带反馈放大器设计与优化方法

1. 两级宽带反馈放大器设计概述在当今高速通信和信号处理系统中&#xff0c;宽带放大器作为关键模拟模块&#xff0c;其性能直接影响整个系统的信号完整性。传统的手工设计方法在面对现代SoC日益复杂的性能需求时显得力不从心&#xff0c;特别是在需要同时满足增益、带宽、噪声…...

SolidWorks 2021建模技巧:用‘拉伸切除’和‘多轮廓草图’高效搞定PCB屏蔽腔设计

SolidWorks 2021建模效率革命&#xff1a;多轮廓草图与拉伸切除在PCB屏蔽设计中的高阶应用 当你在设计一块需要严格电磁屏蔽的PCB时&#xff0c;那些看似简单的腔体结构往往会成为消耗你大量时间的"黑洞"。传统的单轮廓草图拉伸方式不仅操作繁琐&#xff0c;更会在后…...

如何快速集成Draw.io Mermaid插件:提升图表绘制效率的终极指南

如何快速集成Draw.io Mermaid插件&#xff1a;提升图表绘制效率的终极指南 【免费下载链接】drawio_mermaid_plugin Mermaid plugin for drawio desktop 项目地址: https://gitcode.com/gh_mirrors/dr/drawio_mermaid_plugin 还在为绘制复杂的流程图、时序图而烦恼吗&am…...