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

随手笔记-python-opencv 读取图像的顺序 与pytorch处理图像的顺序

import cv2# 读取图像
image_path = 'path/to/your/image.jpg'  # 替换为你的图像路径
image = cv2.imread(image_path)# 检查图像是否成功读取
if image is None:print("Error: Unable to load image.")
else:print("Image loaded successfully.")

1、OpenCV 使用 BGR 格式而不是 RGB 格式。

import matplotlib.pyplot as plt# 将 BGR 图像转换为 RGB
rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 使用 Matplotlib 显示图像
plt.imshow(rgb_image)
plt.title('Image')
plt.axis('off')  # 关闭坐标轴
plt.show()

在 PyTorch 中处理图像时,图像的维度顺序通常与 NumPy 或 OpenCV 中的顺序有所不同。PyTorch 的图像处理顺序通常遵循 [C, H, W] 的维度顺序,即:

  • C:通道数(Channels),例如 RGB 图像有 3 个通道,灰度图像有 1 个通道。

  • H:图像高度(Height)。

  • W:图像宽度(Width)。

2、在使用 PyTorch 处理图像时,通常需要将图像从 [H, W, C] 转换为 [C, H, W] 的格式。以下是常见的处理流程: 

import torch
import numpy as np
from PIL import Image# 加载图像
image_path = "path/to/image.jpg"
image_pil = Image.open(image_path)# 转换为 NumPy 数组
image_np = np.array(image_pil)# 调整维度顺序:从 [H, W, C] 转换为 [C, H, W]
image_np = image_np.transpose((2, 0, 1))# 转换为 PyTorch 张量
image_tensor = torch.from_numpy(image_np).float()# 归一化到 [0, 1]
image_tensor = image_tensor / 255.0print("Image tensor shape:", image_tensor.shape)
print("Image tensor dtype:", image_tensor.dtype)

3、 PyTorch 提供了 torchvision.transforms 模块,可以更方便地处理图像。以下是一个使用 torchvision.transforms 的示例:

import torch
from torchvision import transforms
from PIL import Image# 定义图像预处理流程
transform = transforms.Compose([transforms.ToTensor(),  # 转换为 [C, H, W] 并归一化到 [0, 1]transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  # 标准化
])# 加载图像
image_path = "path/to/image.jpg"
image_pil = Image.open(image_path)# 应用预处理
image_tensor = transform(image_pil)print("Image tensor shape:", image_tensor.shape)
print("Image tensor dtype:", image_tensor.dtype)

http://www.xdnf.cn/news/3817.html

相关文章:

  • Mysql的安装
  • Java面试(2025)—— Spring
  • FPGA入门学习Day1——设计一个DDS信号发生器
  • opencv HSV的具体描述
  • 【Java学习笔记】关键字汇总
  • 赛灵思 XCVU440-2FLGA2892E XilinxFPGA Virtex UltraScale
  • ESP32- 开发笔记- 硬件设计-ESP32-C3 天线设计-利用嘉立创EDA来设计
  • 数码管LED显示屏矩阵驱动技术详解
  • Gitignore详解:版本控制中的文件忽略机制
  • 秒杀系统解决两个核心问题的思路方法总结:1.库存超卖问题;2.用户重复抢购问题。
  • Ubuntu 安装WPS Office
  • JavaScript 对象复制:浅拷贝与深拷贝
  • 观察者模式与发布订阅模式:解耦与通信的艺术
  • 【网络】IP层的重要知识
  • 【工具】视频翻译、配音、语音克隆于一体的一站式视频多语言转换工具~
  • Redis面试——事务
  • NoSQL 与 NewSQL 全面对比:如何选择适合你的数据库方案?
  • 使用代理IP提取数据的步骤是什么?代理IP如何提高爬虫采集效率?
  • 2000-2017年各省国有经济煤气生产和供应业固定资产投资数据
  • 从基础概念到前沿应用了解机器学习
  • VFlash的自动化和自定义动作
  • 山东大学软件学院创新项目实训开发日志(15)之中医知识问答历史对话查看bug处理后端信息响应成功但前端未获取到
  • 【模块化拆解与多视角信息6】自我评价:人设构建的黄金50字——从无效堆砌到精准狙击的认知升级
  • 影视产业链中的律师角色以及合规风控要点
  • 【React】项目的搭建
  • B端小程序如何突破常规,成为企业获客新利器?
  • win10下github libiec61850库编译调试sntp_example
  • XCZU4CG‑2SFVC784I 赛灵思 FPGA XilinxZynq UltraScale+ MPSoC
  • JVM详解(曼波脑图版)
  • 【WPF】 自定义控件的自定义属性