15.opencv:Mat数据结构和ndarray多维数组、深拷贝与浅拷贝

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.size
538920

img的元素个数。

img.dtype
dtype('uint8')

各个元素的类型,为uint8,0~255

img.shape
(480, 640, 3)

img的形状,各个维度的大小。

img.ndim
3

img数组的维度。

总结:用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]

 结果为:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值