09 mat的深浅拷贝

首先 我们需要知道在python中,图片的保存类型以及他的数据结构

个人理解:图片就是多维数组

# opencv用mat这种数据结构来表示图片的
# C++中是用mat来保存图片,Python中把mat转换成了numpy中的ndarray
# Mat由header和data组成,header中记录了图片的维数,大小,数据类型等数据
import cv2
import numpy as np

img = cv2.imread('fj.jpg')
# cv2.namedWindow('img', cv2.WINDOW_NORMAL)
# cv2.resizeWindow('img', 640, 320)
# while True:
#     cv2.imshow('img', img)
#     key = cv2.waitKey(0)
#     if key == ord('q'):
#         break
# cv2.destroyAllWindows()

print(img)
print(type(img))

# ndarray的4种常见属性?
print(img.data)

ones = np.ones((2, 3))
print(ones)
print(ones.data)

# size 元素的总个数
print(img.size)

# dtype 数据类型
print(img.dtype)

# shape各个维度的形状
print(img.shape)

# itemsize不属于mat的属性 itemsize输出array元素的字节数
print(img.itemsize)

# ndim 维度,也就是通道数
print(img.ndim)

# imag 虚拟数组 用的不多
print(img.imag)

 

 

# 因为python中图片数据已经包装成ndarray了,所以对Mat的深浅拷贝,其实就是对ndarray的深浅拷贝
import cv2
import numpy as np
cv2.namedWindow('img0', cv2.WINDOW_NORMAL)
cv2.resizeWindow('img0', 320, 180)

img0 = cv2.imread('fj.jpg')

# 浅拷贝 view 与被拷贝的数据同一块内存地址
img1 = img0.view()

# 深拷贝
img2 = img0.copy()

img0[10:100, 10:100] = [0, 0, 255]

# cv2.imshow('img0', img0)
# cv2.imshow('img1', img1)
# cv2.imshow('img2', img2)

# 将多个图片堆叠到一起(横着堆叠)
# cv2.imshow('img0', np.hstack((img0, img1, img2)))
# 将多个图片堆叠到一起(竖着堆叠)
cv2.imshow('img0', np.vstack((img0, img1, img2)))
cv2.waitKey(0)
cv2.destroyAllWindows()

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值