Python 调用OpenCV读取(操作)图片时,图片的数据的组织形式

时间:2024-04-06 15:13:51

  OpenCV的Python API基于Numpy库,其核心数据结构为ndarray。图像数据一般分为单通道(灰度图,二值图等)和三通道(RGB颜色模式图等),这里对单通道和三通道的图像数据结构进行总结。

1.单通道图片

  单通道的图片使用二维矩阵(数组)表示,python中二维矩阵(数组)使用二维的ndarray构造。

1.1.构造python的二维矩阵(数组)

  构造一个二维矩阵(数组),首先要确定矩阵的行数(高)和列数(宽)以及数据类型,比如unit8、int32和float32等。
  1)构造3行2列的全是1的uint8二维矩阵,代码如下所示:

# -*- coding: utf-8 -*-
import numpy as np
matrix=np.ones((3,2),np.uint8)#定义3行2列的全为1的矩阵
print(matrix)

  程序运行结果为:
Python 调用OpenCV读取(操作)图片时,图片的数据的组织形式
  2)构造2行4列全为0的float32二维矩阵,代码如下:

# -*- coding: utf-8 -*-
import numpy as np
matrix=np.zeros((2,4),np.float32)#定义2行4列的全为0的矩阵
print(matrix)

  程序运行结果为:
Python 调用OpenCV读取(操作)图片时,图片的数据的组织形式

1.2.二维矩阵表示单通道图片

  先使用OpenCV读取并打印高宽为11*17像素的图片,代码如下:

# -*- coding: utf-8 -*-
import cv2
img=cv2.imread('2.png',0)#返回灰度图像
print(img)               #打印代表灰度图像的2维矩阵

  程序运行结果为:
Python 调用OpenCV读取(操作)图片时,图片的数据的组织形式

2.三通道图片

  三通道的图片使用三维矩阵(数组)表示,python中三维矩阵(数组)使用三维的ndarray构造。

2.1.构造python的三维矩阵(数组)

  构造一个三维矩阵(数组),首先要确定矩阵的行数(高)和列数(宽)以及数据类型,比如unit8、int32和float32等。三维数组可以理解成每一个元素都是二维数组,例如初始化一个3*2*2的int8数组(可以看成包含3个2*2的二维矩阵),代码如下:

# -*- coding: utf-8 -*-
import numpy as np
m=np.array([
        [[1,2],[3,4]],
        [[1,2],[5,6]],
        [[3,4],[7,8]]
        ],np.int8)
print(m)

  程序运行结果为:
Python 调用OpenCV读取(操作)图片时,图片的数据的组织形式

2.2.三维矩阵表示三通道图片

  三维ndarray表示h*w大小图像的示意图如下:
Python 调用OpenCV读取(操作)图片时,图片的数据的组织形式
  使用OpenCV读取并打印高宽为3*4三通道的RGB彩色图片,代码如下:

# -*- coding: utf-8 -*-
import cv2
img=cv2.imread('3.png',1)#返回RGB彩色图像
print(img)               #打印代表灰度图像的3维矩阵

  程序运行结果为:
Python 调用OpenCV读取(操作)图片时,图片的数据的组织形式