OpenCV 深拷贝与浅拷贝的区别

news/2024/12/23 2:22:46/

目录

一、概述

1.1原理

1.2区别

1.3应用

二、代码

2.1浅拷贝代码

2.2深拷贝代码


OpenCV图像处理与应用实战算法汇总地址:

OpenCV 图像处理应用实战算法列表汇总(长期更新)


一、概述

        在 OpenCV 和 NumPy 中,深拷贝和浅拷贝的概念非常重要,特别是在处理图像时。下面是深拷贝和浅拷贝的原理、区别、应用,以及实现代码和解释。

1.1原理

浅拷贝:浅拷贝创建一个新的对象,但它包含的是对原始对象中包含的元素的引用。对浅拷贝对象进行修改会影响原始对象,因为它们共享同一块内存。

深拷贝:深拷贝创建一个新的对象,并递归地复制原始对象中包含的所有元素。对深拷贝对象进行修改不会影响原始对象,因为它们各自占用独立的内存空间。

1.2区别

  • 内存使用:浅拷贝共享内存,深拷贝使用独立的内存。
  • 性能:浅拷贝通常比深拷贝快,因为它不需要复制整个对象。
  • 安全性:深拷贝更安全,因为修改副本不会影响原始对象。

1.3应用

  • 浅拷贝:适用于不需要修改数据的场景,或希望不同变量间共享数据。
  • 深拷贝:适用于需要对数据进行修改且不希望影响原始数据的场景。

二、代码

2.1浅拷贝代码

在 OpenCV 中,浅拷贝可以通过直接赋值或 cv2 的 copyTo 方法实现:

import cv2
import numpy as np# 读取图像
image = cv2.imread('path_to_your_image.tiff')# 浅拷贝:直接赋值
shallow_copy = image# 使用 copyTo 方法
shallow_copy2 = np.empty_like(image)
cv2.copyTo(image, shallow_copy2)# 修改浅拷贝
shallow_copy[0, 0] = [255, 0, 0]  # 修改浅拷贝会影响原图像# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Shallow Copy', shallow_copy)
cv2.imshow('Shallow Copy 2', shallow_copy2)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.2深拷贝代码

在 OpenCV 中,深拷贝可以通过 copy 方法或 np.copy 实现:

import cv2
import numpy as np# 读取图像
image = cv2.imread('path_to_your_image.tiff')# 深拷贝:使用 copy 方法
deep_copy = image.copy()# 使用 np.copy 方法
deep_copy2 = np.copy(image)# 修改深拷贝
deep_copy[0, 0] = [255, 0, 0]  # 修改深拷贝不会影响原图像# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Deep Copy', deep_copy)
cv2.imshow('Deep Copy 2', deep_copy2)
cv2.waitKey(0)
cv2.destroyAllWindows()

 


http://www.ppmy.cn/news/1520378.html

相关文章

React 实现PDF预览(数据源使用文件流而不是url)

一 前提 应公司要求,需要进行上传文件(pdf)的预览功能,网上大部分都是使用url作为预览数据源,但是现在后端那边只返回了pdf文件流,所以本文主要是用文件流来预览pdf。 二 首先需要获取pdf文件流&#xff…

【Elasticsearch】file-beat 将文件数据导入es

1、备份 filebeat.yml 文件: 2、新 filebeat.yml 文件配置示例: ###################### Filebeat Configuration Example ########################## Filebeat inputs filebeat.inputs: - type: logenabled: true # 注意:# 文件最后必须…

cenos 7 安装 golang

1、下载地址 All releases - The Go Programming Languagehttps://golang.google.cn/dl/ 2、解压 tar -C /usr/local -zxf go1.14.3.linux-amd64.tar.gz 3、配置PATH 文件 /etc/profile(全局) 或 $HOME/.profile(用户) 或 ~/…

基于人工智能的智能客服系统

目录 引言项目背景 客服系统的现状与挑战AI在客服领域的应用前景系统设计 系统架构模块划分关键技术与实现 自然语言处理(NLP)对话管理语音识别与合成情感分析数据准备与训练 数据收集数据预处理模型训练系统集成与部署 前端接口设计后端服务实现系统集…

基于人工智能的新闻文本自动分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 新闻文本分类是自然语言处理中的一个经典任务,用于将新闻文本自动分类到不同的类别中,如体育、政治、科技等。…

恢复丢失的数据:iPhone 恢复指南

不小心删除了 iPhone 上的重要数据并意识到它没有备份?您并不孤单。在 iPhone 上恢复永久删除的数据似乎令人生畏,但并非总是不可能。我们将探索各种方法,包括使用专门的软件和备份恢复选项,为您提供恢复丢失数据的最佳机会。 常见…

Stable Diffusion majicMIX_realistic模型的介绍及使用

一、简介 majicMIX_realistic模型是一种能够渲染出具有神秘或幻想色彩的真实场景的AI模型。这个模型的特点是在现实场景的基础上,通过加入一些魔法与奇幻元素来营造出极具画面效果和吸引力的图像。传统意义的现实场景虽然真实,但通常情况下缺乏奇幻性&a…

axios发送post请求实例

在body中的数据格式又有两种,一种是 json 数据格式,另一种是 字符串。具体要用哪种格式取决于后端入参的格式。 如果后端接收json数据类型,post 的 headers 需要设置 { ‘content-type’: ’application/json’ },传给后端的数…