OpenCV-10mat的深浅拷贝

一.Mat介绍

mat是OpenCV是在C++语言用来表达图像数据的一种数据结构,在Python转换为numpy的ndarray.

mat是由header和date组成,header中记录了图片的维数、大小、数据类型等信息.

例如:cv2.imshow(winname, mat)

第一个参数为窗口名,第二个参数为mat,也就是图片,类型为ndarray

因此直接打印图片格式也为ndarray.

Opencv用mat这种结构来表示图片的。

C++是用mat来保存数据的,Python相当于对其进行了封装,在python中把mat转化为了numpy的ndarray.

其中有些属性不能使用,只有C++中才有。例如channels不能使用,因为例如图片的形式已经为ndarray,不能转换。像素的位深.type、channels也没有了,行列数也没有了,但可以通过shape查看。

基础:nadrray四种常见的属性:

img.data(实际为存放数据的地址)

img.size(元素的总个数)

img.dtype(数据类型)

img.shape(维度形状)

在Python中Mat数据对应着numpy的ndarray,使用numpy提供的深浅拷贝方法即可实现Mat的拷贝。

二. 示例代码如下:

复制代码
import cv2
import numpy as np

img = cv2.imread("xiaoyang.jpeg")

# 浅拷贝相当于常见创建了一份原始数据的视图 ,用view
img2 = img.view()

# 深拷贝
img3 = img.copy()

# 改成红色
img[10:100, 10:100] = [0, 0, 255]

# cv2.imshow("img", img)
# cv2.imshow("img", img2)
cv2.imshow("img", np.hstack((img, img2, img3)))  # 横着排列三张图


cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:原图和浅拷贝出现红色部分,深拷贝没有改变。

相关推荐
向量引擎小橙1 分钟前
视觉艺术的“奇点”:深度拆解 Gemini-3-Pro-Image-Preview 绘画模型,看这只“香蕉”如何重塑 AI 创作逻辑!
人工智能·python·gpt·深度学习·llama
AI周红伟3 分钟前
周红伟:数字人智能体构建实操,《数字人智能体部署应用:数字人大模型和智能体+Skills+RAG+Agent+Claude Code的部署应用案例实操》
人工智能
KG_LLM图谱增强大模型15 分钟前
人工智能本体论:大模型辅助构建AI概念层级体系
人工智能
Web3VentureView15 分钟前
X Space AMA回顾|预测熊市底部:当市场寻找价格,SYNBO正在构建未来
人工智能·物联网·金融·web3·区块链
SmartBrain1 小时前
Python 特性(第一部分):知识点讲解(含示例)
开发语言·人工智能·python·算法
byzh_rc1 小时前
[深度学习网络从入门到入土] 网络中的网络NiN
网络·人工智能·深度学习
AI周红伟1 小时前
周红伟:企业智能体构建实操,《下一代智能体:Claude code+Skills+Gemini+RAG+Agent智能体构建案例实操》
人工智能
向上的车轮1 小时前
Chaterm:AI 智能终端极简手册
人工智能
世优科技虚拟人1 小时前
从教室到校史馆讲解,AI数字人一体机打造全场景智慧校园助手
人工智能·科技·大模型·数字人
edisao1 小时前
《CV认知变异度模型:在系统规训中保留结构自由》
人工智能