【问题标题】:What happens with the original numpy array when calling OpenCV functions?调用 OpenCV 函数时,原始 numpy 数组会发生什么情况?
【发布时间】:2016-01-29 22:32:43
【问题描述】:

我一直在尝试加快计算机视觉代码的速度,但遇到了问题。如果我使用 OpenCV 函数,该函数主要将其数据存储在一个 numpy 数组中,则输出是一个确定大小的新数组,通常与源图像大小相同。我知道如果我选择该名称作为源以外的名称,我现在有两个不同的数组,但是如果我将它命名为相同的东西会发生什么?例如:

import numpy as np
import cv2

img = cv2.imread('IMG_1478.jpg', 1)
cv2.imshow('img', img)
dilation = np.ones((10, 10), "uint8")
img = cv2.dilate(img, dilation)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

如果我仍在创建数组的副本,我假设我有两个不同的数组在不同的内存地址但具有相同的字符串值。那是对的吗?如果是这样,python中有什么方法可以在不删除新图像的情况下删除原始图像?类似于我在 C 中可以做的事情?我知道我可以使用不同的名称,这样我就可以删除原来的,我只是像我一样提出问题,以便我可以更好地理解使用 python 和 opencv 分配内存的方法。

【问题讨论】:

    标签: python opencv numpy memory


    【解决方案1】:

    img = cv2.dilate(img, dilation) 将创建一个新数组并将名称 img 重新绑定到它。如果旧数组的引用计数为零,则img指向的旧数组将被释放。

    如果您不想dilate() 创建新数组,您可以将数组对象传递给dst 参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-11
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多