简洁说清楚图像数据格式那些事-RGB和BGR

简洁说清楚图像数据格式那些事-RGB和BGR

1 JPG 文件默认以 RGB 颜色空间编码存储.

  同样 .png 也是这样的格式。

2 读文件

  主流包:opencv; PIL和matlib

  opencv:按照BGR格式读;   PIL和matlib按照RGB格式读;

  -> 使用opencv读 jpg -> 默认会把原RGB存储转读为BGR;-> 效果就是 如果遇到颜色异常(如红蓝反色)

 

  -> 正解就是[如果使用PIL 可以不用这一步]

  

import cv2
image = cv2.imread("image.jpg") 
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

 

  聪明的你也许可以想到:image 如果是矩阵数据了 可以更简单的 image = image[::-1],倒序即可,实现BGR -> RGB

  之所以这么做 就是因为模型 要求RGB数据。

3 搅局的包

  搅局:深度学习框架(如 PyTorch)通常要求输入张量的格式是 CHW

     而图像读取库(如 OpenCV、Pillow)返回的格式是 HWC。

  所以你以为转到RGB就可以了  实际还得转换。

       

 np.einsum("HWC->CHW", img)

 

4 更大搅局

  HWC->CHW 后内存不连续 -> 某些计算库(如 PyTorch、CUDA)要求张量内存连续,否则可能引发错误或性能下降。

  np.ascontiguousarray 函数保证内存连续。

5 一招搞定全部搅局

  img = np.ascontiguousarray(np.einsum("HWC->CHW", img)[::-1], dtype=self.ndtype) /255

  注意255是归一化,可以不加。

  self.ndtype = np.float32

 

  

  

posted on 2025-04-24 15:14  lexn  阅读(291)  评论(0)    收藏  举报

导航