针对 RGB 图像,用 cv2、matplotlib、PyTorch库处理需要变换

cv2 库是 OpenCV库 的 Python 版本。

cv2.imread 读取 RGB 图像,得到的 data 是 BGR 的,即 data[:,:,0] 是 Blue 通道,data[:,:,1] 是 Green通道,data[:,:,2] 是 Red 通道。

data.shape = (H,W,C)。

注意:

  • 如果需要的是 data 的通道按照 RGB 顺序排列的 data,可以执行 pic_data = cv2.cvtColor(pic_data, cv2.COLOR_BGR2RGB) # BGR -> RGB。比如 matplotlib 库就需要通道按照 RGB 顺序排列的 data 。
  • cv2.imread 得到的 data 的 shape 是 (H,W,C) 的,但是 PyTorch 需要的 Tensor 的 shape 是 (B,C,H,W)的,所以需要执行 data.permute(2, 0, 1) # (H,W,C) -> (C,H,W)
  • matplotlib.pyplot.scatter(x,y) x 是 水平轴的索引, y 是 竖直轴的索引。
import cv2
import numpy as np
import torch
import torch.nn.functional as F

pic_name = 'forest.png'

pic_data = cv2.imread(pic_name, cv2.IMREAD_UNCHANGED) # BGR(Blue Green Red)

print("Data's type:  ", type(pic_data))
print("Data's shape:  ", pic_data.shape) # (H,W,C)
print("Data's data:\n",pic_data,"\n")


pic_data = cv2.cvtColor(pic_data, cv2.COLOR_BGR2RGB) # BGR -> RGB
pic_shape = pic_data.shape                           # (H,W,C)
print("Data's shape after cv2.COLOR_BGR2RGB:  ", pic_data.shape)
print("Data's data after cv2.COLOR_BGR2RGB:\n",pic_data,"\n")

pic_data = torch.from_numpy(pic_data)
pic_type = type(pic_data)
pic_shape = pic_data.shape
print("Data's type:  ", type(pic_data))
print("Data's shape:  ", pic_data.shape)

pic_data = pic_data.permute(2, 0, 1)  # (H,W,C) -> (C,H,W)
print("Data's shape after permute:  ", pic_data.shape)
print("Data's data after permute\n",pic_data)

输出如下:

Data's type:   <class 'numpy.ndarray'>
Data's shape:   (1414, 1885, 3)
Data's data:
 [[[ 32  28   0]
  [ 76  72  37]
  [156 151 118]
  ...
  [ 30  45  18]
  [ 15  34   7]
  [ 14  34  11]]

 [[152 147 114]
  [116 111  78]
  [ 45  40   7]
  ...
  [ 43  57  29]
  [ 33  50  23]
  [ 20  36  12]]

 [[225 222 191]
  [253 250 219]
  [147 144 113]
  ...
  [ 50  60  30]
  [ 52  64  36]
  [ 39  45  20]]

 ...

 [[ 51  67  83]
  [ 35  53  64]
  [ 43  62  65]
  ...
  [176 191 224]
  [125 134 168]
  [ 12  17  50]]

 [[ 46  63  76]
  [ 29  48  56]
  [ 33  53  54]
  ...
  [ 50  67 100]
  [132 142 176]
  [111 120 153]]

 [[ 32  50  61]
  [ 33  52  59]
  [ 43  63  64]
  ...
  [  7  26  59]
  [ 81  93 127]
  [128 139 171]]] 

Data's shape after cv2.COLOR_BGR2RGB:   (1414, 1885, 3)
Data's data after cv2.COLOR_BGR2RGB:
 [[[  0  28  32]
  [ 37  72  76]
  [118 151 156]
  ...
  [ 18  45  30]
  [  7  34  15]
  [ 11  34  14]]

 [[114 147 152]
  [ 78 111 116]
  [  7  40  45]
  ...
  [ 29  57  43]
  [ 23  50  33]
  [ 12  36  20]]

 [[191 222 225]
  [219 250 253]
  [113 144 147]
  ...
  [ 30  60  50]
  [ 36  64  52]
  [ 20  45  39]]

 ...

 [[ 83  67  51]
  [ 64  53  35]
  [ 65  62  43]
  ...
  [224 191 176]
  [168 134 125]
  [ 50  17  12]]

 [[ 76  63  46]
  [ 56  48  29]
  [ 54  53  33]
  ...
  [100  67  50]
  [176 142 132]
  [153 120 111]]

 [[ 61  50  32]
  [ 59  52  33]
  [ 64  63  43]
  ...
  [ 59  26   7]
  [127  93  81]
  [171 139 128]]] 

Data's type:   <class 'torch.Tensor'>
Data's shape:   torch.Size([1414, 1885, 3])
Data's shape after permute:   torch.Size([3, 1414, 1885])
Data's data after permute
 tensor([[[  0,  37, 118,  ...,  18,   7,  11],
         [114,  78,   7,  ...,  29,  23,  12],
         [191, 219, 113,  ...,  30,  36,  20],
         ...,
         [ 83,  64,  65,  ..., 224, 168,  50],
         [ 76,  56,  54,  ..., 100, 176, 153],
         [ 61,  59,  64,  ...,  59, 127, 171]],

        [[ 28,  72, 151,  ...,  45,  34,  34],
         [147, 111,  40,  ...,  57,  50,  36],
         [222, 250, 144,  ...,  60,  64,  45],
         ...,
         [ 67,  53,  62,  ..., 191, 134,  17],
         [ 63,  48,  53,  ...,  67, 142, 120],
         [ 50,  52,  63,  ...,  26,  93, 139]],

        [[ 32,  76, 156,  ...,  30,  15,  14],
         [152, 116,  45,  ...,  43,  33,  20],
         [225, 253, 147,  ...,  50,  52,  39],
         ...,
         [ 51,  35,  43,  ..., 176, 125,  12],
         [ 46,  29,  33,  ...,  50, 132, 111],
         [ 32,  33,  43,  ...,   7,  81, 128]]], dtype=torch.uint8)

举个例子

import numpy as np
import cv2
import matplotlib.pyplot as plt


pic_name = 'PYY.png'
pic_data = cv2.imread(pic_name, cv2.IMREAD_UNCHANGED) # BGR(Blue Green Red)
imgplot = plt.imshow(pic_data)
plt.show()

原图如下
在这里插入图片描述
用 cv2.imread 导入后再直接用 matplotlib show出来的效果如下:
在这里插入图片描述

uv 坐标

u 是水平轴
v 是竖直轴
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

培之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值