
Mat属性是opencv——c++描述图像的方式,在opencv——python中,由于python作为接口语言,将其套壳,故在python中Mat数据对应numpy的ndarray,底层还是Mat。
import cv2
dog = cv2.imread('./dog.jpeg')
cv2.imshow('dog', dog)
cv2.waitKey(0)
cv2.destroyAllWindows()读取、显示、按任意键退出。
import cv2
img = cv2.imread('./dog.jpeg')读取。
type(img)numpy.ndarray显示img类型。为numpy中的多维数组类型。
img.data<memory at 0x00000237A63AA138>img内存位置。
img.size538920
img的元素个数。
img.dtypedtype('uint8')各个元素的类型,为uint8,0~255
img.shape(480, 640, 3)img的形状,各个维度的大小。
img.ndim3img数组的维度。
总结:用python的numpy的ndarray通过不同的形式可以把mat的数据结构描述出来。
深拷贝:
import cv2
import numpy as np
img = cv2.imread('./cat.jpeg')
# 浅拷贝.
img2 = img.view()
# 深拷贝
img3 = img.copy()
img2[10:100, 10: 100] = [0, 0, 255]
cv2.imshow('img', np.hstack((img, img2, img3)))
cv2.waitKey(0)
cv2.destroyAllWindows()浅拷贝——共享数据。深拷贝——复制数据并独立出去。
采用浅拷贝,修改浅拷贝对象,原来的对象会发生改变。采用深拷贝由于独立了出去,故修改后不会影响到原来的对象。
其中np.hstack()为横着堆在一起。vstack为竖着堆在一起。
故改变浅拷贝结果为:

改变深拷贝:
img3[10:100, 10: 100] = [0, 0, 255]
结果为:

版权声明:本文为wzfafabga原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。