首页 > 解决方案 > 多次克隆 NumPy 数组

问题描述

我将一张图片加载到一个 numpy 数组中,并且需要以 2 个不同的阈值对其图片进行阈值处理。

import numpy as np
import cv2

cap = cv2.Videocapture(0)
_,pic = cap.read()
pic1 = pic
pic2 = pic

pic1[pic1 > 100] = 255
pic2[pic2 > 200] = 255

当我只希望他们修改 pic1 和 pic2 时,此代码将始终编辑 pic

标签: pythonarraysnumpycopy

解决方案


在python中,对象和变量是有区别的。变量是分配给对象的名称;并且一个对象在内存中可以有多个名称。

通过这样做pic1 = pic; pic2 = pic,您将同一对象分配给多个不同的变量名称,因此您最终会修改同一对象。

您想要的是使用np.ndarray.copy-</p> 创建副本

pic1 = pic.copy()
pic2 = pic.copy()

或者,非常相似,使用np.copy—</p>

pic1, pic2 = map(np.copy, (pic, pic))

这种语法实际上使您可以轻松地进行多次pic克隆:

pic1, pic2, ... picN = map(np.copy, [pic] * N)

N您要创建的副本数在哪里。


推荐阅读