Mat是OpenCV在C++语言中用来表示图像数据的一种数据结构.在python中转化为numpy的ndarray. Mat由header和data组成, header中记录了图片的维数, 大小, 数据类型等数据.



- Mat共享数据

在python中Mat数据对应numpy的ndarray, 使用numpy提供的深浅拷贝方法即可实现Mat的拷贝.
- import cv2
- import numpy as np
-
- img = cv2.imread('./cat.jpeg')
-
- #浅拷贝
- img2 = img.view()
-
- #深拷贝
- img3 = img.copy()
-
- img[10:100, 10:100] = [0, 0, 255]
-
- cv2.imshow('img', img)
- cv2.imshow('img2', img2)
- cv2.imshow('img3', img3)
-
- cv2.waitKey(0)
- cv2.destroyAllWindows()
# cv2.imshow('img', img)
# cv2.imshow('img2', img2)
# cv2.imshow('img3', img3)替换为:
cv2.imshow('img', np.hstack((img, img2, img3))) #hstack是横着堆叠cv2.imshow('img', np.vstack((img, img2, img3))) #vstack是竖着堆叠

OpenCV中的Mat在python中已经转化为ndarray, 通过ndarray的属性即可访问Mat图像的属性
- import cv2
- import numpy as np
-
- img = cv2.imread('cat.jpeg')
-
- #shape属性中包括了三个信息
- #高度,长度 和 通道数
- print(img.shape)
-
- #图像占用多大空间
- #高度 * 长度 * 通道数
- print(img.size)
-
- #图像中每个元素的位深
- print(img.dtype)