2013-05-14 51 views
21

我是新來的opencv,這裏是一個問題,什麼是cv中的cv :: clone()相同的python函數? 我只是試圖通過在cv2中克隆圖像python

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

得到一個矩形,但是當我畫上一條線,我發現了線都出現在IMG和rectImage,所以,我怎麼能得到這個工作?

回答

30

如果使用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. 
+1

所有這些神奇數字的含義是什麼 – raaj 2014-10-07 09:31:20

+0

它們只是範圍在0-100之間的數字。每一步之後只需打印'x'和'y'。然後你會明白這個主意。 – 2014-10-07 10:35:30

1

您可以簡單地使用Python標準庫。做一個原始圖像的淺拷貝如下:

import copy 

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

我最喜歡的方法使用cv2.copyMakeBorder沒有邊框,就像這樣。

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

第一個答案是正確的,但你說你正在使用固有使用numpy數組的cv2。因此,爲了使一個完整的不同拷貝說「MYIMAGE」:

newImage = myImage.copy() 

以上就夠了。無需導入numpy。