使用实验数据分析:“ = ” 和“.copy()” 的区别【python-opencv】

简介: 使用实验数据分析:“ = ” 和“.copy()” 的区别【python-opencv】

前言


  最近总结了下三种复制图像的方法,也是在业务上经常会用到的同时也是在面试过程中会被提问的问题,这三种方式分别是:

  1. =
  2. .copy()

下面通过一系列实验比对进行剖析这三种方式的差异




比对实验


实验之前:

准备好实验数据,我们准备待测图像test.jpg。这张图像是一张纯蓝色RGB图像,图像信息如下:

  1. 图像shape = (480, 640, 3)
  2. 图像占用内存 5431 Bit


实验一:计算耗时


  调用time包进行计算从开始读取数据到复制完数据所消耗的时间,我们分别使用 方式1、2进行复制图像计算耗时:

“ = ” :   0.003245115280151367

“.copy()”: 0.005619525909423828


结论: t(=) < t(.copy())

实验代码:

import time
import cv2
t1 = time.time()
img1 = cv2.imread("test.jpg")
img2 = img1
# img2 = img1.copy()
t2 = time.time()
t = t2 - t1
print(t)
复制代码



实验二:查看数据大小

  使用sys库获取对象的大小(以字节为单位),sys.getsizeof()进行获取对象的大小,这里大小是指加载的python对象(及其所有元数据)的大小:

“ = ” :   921736(此时复制图等于原图)

“.copy()”: 921736(此时复制图等于原图)

结论: t(=) = t(.copy())


实验代码:

import cv2
import sys
img1 = cv2.imread("test.jpg")
# img2 = img1
img2 = img1.copy()
print(sys.getsizeof(img1))
print(sys.getsizeof(img2))
复制代码

  使用pympler库,它提供了计算对象使用的RAM内存的工具,我们可以使用pympler库进行查看运算这两种复制图像时所产生的RAM。

“ = ” :   921752(此时复制图等于原图)

“.copy()”: 921752(此时复制图等于原图)

结论: t(=) = t(.copy())


实验代码:

import cv2
from pympler import asizeof
img1 = cv2.imread("test.jpg")
img2 = img1
# img2 = img1.copy()
print(asizeof.asizeof(img1))
print(asizeof.asizeof(img2))
复制代码



存储复制图像

   我们采用cv2.imwrite()把复制的图像进行存储,然后直接查看存储数据的属性得到其值进行比较。 “ = ” :   5431(此时复制图等于原图)

“.copy()”: 5431(此时复制图等于原图)

结论: t(=) = t(.copy())


实验代码:

import cv2
img1 = cv2.imread("1111.jpg")
img2 = img1
# img2 = img1.copy()
cv2.imwrite("savetest.jpg", img2)
复制代码




结论


   从结果上来看,这两种复制图像并没有什么不同,在大多数情况下三可以通用的。如果业务逻辑上没有过多的重载的话可以使用=进行复制图像(节约时间);如果在业务逻辑上我们需要改变原图属性而复制的图像仅需保持与原图相同属性,则可以选择.copy()进行图像复制。


附图


image.png

相关文章
|
2月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
51 2
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
117 4
|
2月前
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
60 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
|
2天前
|
机器学习/深度学习 数据采集 数据可视化
数据分析之旅:用Python探索世界
数据分析之旅:用Python探索世界
7 2
|
28天前
|
机器学习/深度学习 测试技术 数据处理
KAN专家混合模型在高性能时间序列预测中的应用:RMoK模型架构探析与Python代码实验
Kolmogorov-Arnold网络(KAN)作为一种多层感知器(MLP)的替代方案,为深度学习领域带来新可能。尽管初期测试显示KAN在时间序列预测中的表现不佳,近期提出的可逆KAN混合模型(RMoK)显著提升了其性能。RMoK结合了Wav-KAN、JacobiKAN和TaylorKAN等多种专家层,通过门控网络动态选择最适合的专家层,从而灵活应对各种时间序列模式。实验结果显示,RMoK在多个数据集上表现出色,尤其是在长期预测任务中。未来研究将进一步探索RMoK在不同领域的应用潜力及其与其他先进技术的结合。
68 4
|
1月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
【9月更文挑战第2天】数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
51 5
|
2月前
|
供应链 数据可视化 数据挖掘
【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一
本文详细介绍了第十一届泰迪杯数据挖掘挑战赛B题的解决方案,涵盖了对产品订单数据的深入分析、多种因素对需求量影响的探讨,并建立了数学模型进行未来需求量的预测,同时提供了Python代码实现和结果可视化的方法。
94 3
【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一
|
2月前
|
机器学习/深度学习 数据采集 数据挖掘
【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题二
本文提供了第十一届泰迪杯数据挖掘挑战赛B题问题二的详细解题步骤,包括时间序列预测模型的建立、多元输入时间预测问题的分析、时间序列预测的建模步骤、改进模型的方法,以及使用Python进行SARIMA模型拟合和预测的具体实现过程。
59 1
|
2月前
|
数据采集 机器学习/深度学习 搜索推荐
【2023钉钉杯复赛】A题 智能手机用户监测数据分析 Python代码分析
本文介绍了2023钉钉杯复赛A题的智能手机用户监测数据分析,包括数据预处理、特征提取、推荐模型建立与评价的Python代码实现,旨在通过用户使用记录预测APP使用情况并建立推荐系统。
59 0
【2023钉钉杯复赛】A题 智能手机用户监测数据分析 Python代码分析
|
2月前
|
机器学习/深度学习 算法 数据挖掘
【2023 年第二届钉钉杯大学生大数据挑战赛初赛】 初赛 A:智能手机用户监测数据分析 问题一Python代码分析
本文提供了2023年第二届钉钉杯大学生大数据挑战赛初赛A题"智能手机用户监测数据分析"的Python代码分析,包括数据预处理、特征工程、聚类分析等步骤,以及如何使用不同聚类算法进行用户行为分析。
47 0
【2023 年第二届钉钉杯大学生大数据挑战赛初赛】 初赛 A:智能手机用户监测数据分析 问题一Python代码分析