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

news2024/11/17 8:33:59

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.coloradmin.cn/o/1047446.html

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

相关文章

阿里云服务器方升架构、自研硬件、AliFlash技术创新

阿里云服务器技术创新:服务器方升架构及自研硬件、自研存储硬件AliFlash和阿里云异构计算加速平台,阿里云百科分享阿里云服务器有哪些技术创新: 目录 服务器技术创新 服务器方升架构及自研硬件 自研存储硬件AliFlash 阿里云异构计算加速…

进入k8s下mysql docker容器,设置慢查询开关

服务器账号信息:wps/kingsoft 进入mysql容器: kc exec -ti -n kube-public mysql-0 -- bash 访问数据库: mysql -h10.13.83.171 -uhuangweiheng -phuangweiheng_password; 数据库超管:root/wpsepmysql sudo service mysql r…

QQ农场怀旧版搭建(附带搭建完成示例)

QQ农场搭建 示例均在宝塔面板搭建搭建完成网站,欢迎━(`∀)ノ亻!大家种种菜 http://farm.dreamlove.top/如果不出意外应该会一直续费下去,毕竟linux服务器便宜很多~ 所需依赖 mysql 5.5 php 5.4 nginx 1.22下载农场文件并安装好了依赖 下载地址1:https://cloudr…

Cloudera Manager-6.2.0安装文档

环境准备 安装包地址 链接:https://pan.baidu.com/s/1QrLsXynmopqoZhDkoIAihg 提取码:kaoi 虚拟机建议配置 至少3台节点,server节点安装cloudera server服务和mysql服务 server节点 ​ 内存:3GB以上 ​ 存储:4…

react 网页/app复制分享链接到剪切板,分享到国外各大社交平台,通过WhatsApp方式分享以及SMS短信方式分享链接内容

1.需求 最近在做一个国际网站app,需要把app中某个页面的图文链接分享到国外各大社交平台上(facebook,whatapp,telegram,twitter等),以及通过WhatApp聊天方式分享,和SMS短信方式分享链接内容,该怎么做呢?图示如下: 分享到国外各大社交平台&am…

详解Avast Driver Updater:电脑驱动更新工具的利器还是多余的软件?

亲爱的读者朋友们,你是不是经常为电脑的驱动问题而烦恼?如果是的话,你可能会对这款软件——Avast Driver Updater 电脑驱动更新工具感兴趣。但在你决定尝试之前,不妨先和我一起深入探讨一下它的优点、缺点以及它适用的使用场景。 …

移动机器人建模两轮驱动与四轮驱动

本文章仅记录小编再学习过程中的知识总结,若有不对之处请批评指正,互相学习,共同进步。 一、两轮驱动运动学模型 示例最后得出,该机器人会沿全局参考系的Y轴以速度1的旋转的同时,以速度3瞬时的移动。 二、四轮驱动运动…

Ps:抓手工具

抓手工具 Hand Tool常用于在文档窗口中平移图像,方便观察大尺寸图像(或者被放大的图像)的局部细节,是操作 Ps 最常用的辅助工具之一。 快捷键:H ◆ ◆ ◆ 常用操作方法与技巧 1、快捷键 H 是一个弹簧键。即&#xff…

【Linux】 df命令使用

df命令 df 命令,用于显示 Linux 系统中各文件系统的硬盘使用情况,包括文件系统所在硬盘分区的总容量、已使用的容量、剩余容量等 执行命令结果 各列信息的含义分别是: Filesystem:表示该文件系统位于哪个分区,因此该…

算法与数据结构-AC自动机

文章目录 什么是多模式串匹配算法基于单模式串和 Trie 树实现的敏感词过滤经典的多模式串匹配算法:AC 自动机 什么是多模式串匹配算法 单模式串匹配算法,是在一个模式串和一个主串之间进行匹配,也就是说,在一个主串中查找一个模式…

精准纠错音错节奏 钢琴老师都在推荐小叶子智能陪练

如今市面上帮助孩子练琴的软件越来越多,有线上陪练的,还有AI陪练。产品琳琅满目,家长也挑花了眼。如何挑选一款真正能帮助孩子练琴的App呢?作为从业十余年的钢琴老师,可以分享三点建议给大家。 看品牌实力是否过硬 现…

二维平面扭曲的python实现及思路

二维平面扭曲的python实现及思路 缘起原理实现代码 缘起 工作需要,需要一个尝试改变设备布点的方法,在csdn闲逛时,偶然间发现这样的一篇文章 二维扭曲,参考这位博主的文章,我对其内容进行复现和进一步挖掘。若有侵权或…

基于STM32+OneNet设计的GPS定位器(ESP8266)

一、 设计说明 随着移动互联网和物联网技术的快速发展,越来越多的智能设备被广泛应用于各个领域。其中,GPS定位器是一种常见的智能设备,可以用于车辆、家庭、宠物等物品的实时定位。在实际使用中,GPS定位器需要具有实时上传位置数据、低功耗、精度高等特点。 当前提出了一…

Ctfshow web入门 代码审计篇 web301-web310 详细题解 全

CTFshow 代码审计 web301 下载的附件的目录结构如下: 开题后界面,看见输入框,感觉是sql。 大概浏览一遍源码,我们可以发现在checklogin.php文件中有无过滤的SQL语句,SQL注入没得跑了。 这题SQL注入有三种做法。 方法一…

java进阶-Netty

Netty 在此非常感谢尚硅谷学院以及韩顺平老师在B站公开课 Netty视频教程 Netty demo代码文件 I/O 说NIO之前先说一下BIO(Blocking IO),如何理解这个Blocking呢?客户端监听(Listen)时,Accept是阻塞的&…

游戏模板:MFPS 2.0: Multiplayer FPS

MFPS 2.0: Multiplayer FPS Most complete multiplayer first-person shooter kit. 可编程渲染管线(SRP)兼容性 Unity可编程渲染管线(SRP)是让您能够通过C#脚本控制渲染的一个功能。SRP是支撑通用渲染管线(URP&#…

紫光同创FPGA图像视频采集系统,基于OV7725实现,提供工程源码和技术支持

目录 1、前言免责声明 2、设计思路框架视频源选择OV7725摄像头配置及采集动态彩条HDMA图像缓存输入输出视频HDMA缓冲FIFOHDMA控制模块HDMI输出 3、PDS工程详解4、上板调试验证并演示准备工作静态演示动态演示 5、福利:工程源码获取 紫光同创FPGA图像视频采集系统&am…

全球性区块链服务网络(BSN)机制体系、关键技术和应用项目科技成果鉴定会在北京举行

原标题:《全球性区块链服务网络(BSN)机制体系、关键技术和应用项目科技成果鉴定会在北京举行》 2023年9月17日,“全球性区块链服务网络(BSN)机制体系、关键技术和应用”科技成果鉴定会在北京举行。鉴定委员…

[FineReport]安装与使用(连接Hive3.1.2)

一、安装(对应hive3.1.2) 注:服务器的和本地的要同时安装。本地是测试环境,服务器的是生产环境 1、服务器安装 1、下载 免费下载FineReport - FineReport报表官网 向下滑找到 2、解压 [rootck1 /home/data_warehouse/software]# tar -zxvf tomcat…

十四,间接漫反射用到球体中

间接光照分为间接漫反射和间接镜面反射。 辐照度图是用来适用于间接漫反射的。 直射光也有漫反射,对比下两者。 直接光kD * albedo / PI * radiance * NdotL;其中radiance * NdotL是光照, 间接光: kD * texture(irradianceMap, N).rgb* al…