68

我是opencv的新手,这里有一个问题,与cpp中的cv::clone()相同的python函数是什么?我只是试着通过

    rectImg = img[10:20, 10:20]

但是当我在上面画一条线时,我发现这条线同时出现在 img 和 rectImage 上,那么,我该如何完成呢?

4

5 回答 5

107

第一个答案是正确的,但您说您使用的是 cv2,它本质上使用 numpy 数组。因此,要制作一个完全不同的“myImage”副本:

newImage = myImage.copy()

以上就够了。无需导入 numpy.

于 2016-02-27T07:22:48.533 回答
68

如果你使用cv2,正确的方法是使用.copy()Numpy 中的方法。它将创建您需要的数组的副本。否则它将仅生成该对象的视图。

例如:

In [1]: import numpy as np

In [2]: x = np.arange(10*10).reshape((10,10))

In [4]: y = x[3:7,3:7].copy()

In [6]: y[2,2] = 1000

In [8]: 1000 in x
Out[8]: False     # see, 1000 in y doesn't change values in x, parent array.
于 2013-05-14T05:01:20.583 回答
10

使用 python 3 和 opencv-python 4.4.0 版,以下代码应该可以工作:

img_src = cv2.imread('image.png')
img_clone = img_src.copy()
于 2020-10-13T16:18:33.213 回答
1

您可以简单地使用 Python 标准库。制作原始图像的浅拷贝,如下所示:

import copy

original_img = cv2.imread("foo.jpg")
clone_img = copy.copy(original_img)
于 2015-04-21T14:00:43.523 回答
1

我最喜欢的方法使用没有边框的 cv2.copyMakeBorder,就像这样。

copy = cv2.copyMakeBorder(original,0,0,0,0,cv2.BORDER_REPLICATE)
于 2015-05-14T00:32:02.577 回答