在cv2 Python中克隆图像

bqf10yzr  于 2023-01-16  发布在  Python
关注(0)|答案(5)|浏览(183)

我是OpenCV的新手。在C++中,什么Python函数的作用与 cv::clone() 相同?
我只是想找个借口

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

但是当我在它上面画一条线的时候,我发现这条线同时出现在 img 和rectImage上,那么,我该怎么做呢?

sycxhyv7

sycxhyv71#

Abid Rahman K的答案是正确的,但是你说你使用的是cv2,它本身就使用NumPy数组。所以,要制作一个完全不同的副本,比如说“myImage”:

newImage = myImage.copy()

以上就足够了,不需要导入NumPy(numpy)。

vvppvyoh

vvppvyoh2#

如果使用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, the parent array.
dly7yett

dly7yett3#

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

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

zbdgwd5y4#

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

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

wmtdaxz35#

你可以简单地使用Python标准库,如下所示制作一个原始图像的浅层副本:

import copy

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

相关问题