numpy和cv2.imread( )中三维数组位置详解


0 前言

我们在做图像处理的时候会遇到三维数组,也可以称为三维张量(tensor)。我们可以将三维数组想象成为一个立方体,第一维度理解为立方体的长,第二维度理解为宽,彩色图片是3通道的,所以第三维“图片通道”想象成深度。用立方体中直观展示:
在这里插入图片描述

1 numpy中的三维数组

通过 np.zeros( ) 创建一个2行4列3个通道的三维数组,并给第1行第2列第1通道赋值为1。

import numpy as np
def test3D():
    data_array = np.zeros((2, 4, 3), dtype=np.int)
    data_array[1, 2, 1] = 1

    print(data_array)

test3D()

得到以下结果:

[[[0 0 0]
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 [[0 0 0]
  [0 0 0]
  [0 1 0]
  [0 0 0]]]

通过观察数值(2,4,3)可以理解:这里的2行变成了2个“更大规模的行”,4列变成了4个“行”,3通道变成了3个“列”。

2 cv2.imread( )中的三维数组

读取一张彩色图片:

import cv2
img = cv2.imread('./food-11/testing/0000.jpg')
print(img)

打印结果如下:

[[[  0  10  10]
  [  1  11  11]
  [  4  14  14]
  ...
  [ 12  17  15]
  [ 11  18  15]
  [ 12  19  16]]

 [[  0  10  10]
  [  1  11  11]
  [  3  13  13]
  ...
  [ 10  17  14]
  [ 10  17  14]
  [ 10  17  14]]

 [[  2  12  12]
  [  3  13  13]
  [  3  13  13]
  ...
  [  9  15  14]
  [ 10  16  15]
  [  8  16  15]]

 ...

 [[131 137 112]
  [132 138 113]
  [136 140 115]
  ...
  [135 135 117]
  [138 136 118]
  [138 136 118]]

 [[132 138 113]
  [134 140 115]
  [137 141 116]
  ...
  [137 138 118]
  [139 138 118]
  [136 135 115]]

 [[134 140 115]
  [135 141 116]
  [139 143 118]
  ...
  [138 139 119]
  [139 138 118]
  [135 134 114]]]

因为cv2.imread( )是读取图片的,所有每个维度是有含义的。这里cv2.imread( )默认将图片转换成了一个三维数组,"[[["中最里面的一维代表的是一个像素的三个通道的灰度值,第二个维度代表的是第一行所有像素的灰度值,第三个维度,也就是最外面的一个维度代表的是整张图片。

参考:
https://blog.csdn.net/xf8964/article/details/90524020
https://blog.csdn.net/gaifuxi9518/article/details/88948690
https://blog.csdn.net/qq_34840129/article/details/86294530

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值