在cv2 python中克隆图像

时间:2013-05-14 00:05:07

标签: python opencv

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

获得一个矩形
    rectImg = img[10:20, 10:20]

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

5 个答案:

答案 0 :(得分:46)

第一个答案是正确的,但你说你使用的是cv2,它固有地使用numpy数组。所以,要制作一个完全不同的副本“myImage”:

newImage = myImage.copy()

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

答案 1 :(得分:42)

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

例如:

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.

答案 2 :(得分:2)

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

import copy

original_img = cv2.imread("foo.jpg")
clone_img = copy.copy(original_img)

答案 3 :(得分:1)

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

copy = cv2.copyMakeBorder(original,0,0,0,0,cv2.BORDER_REPLICATE)

答案 4 :(得分:1)

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

img_src = cv2.imread('image.png')
img_clone = img_src.copy()