2013-05-14 12 views
21

Jestem nowy w opencv, tutaj jest pytanie, jaka jest funkcja python, która działa tak samo jak cv :: clone() w cpp? po prostu postarać się rect przezKlonowanie obrazu w pythonie cv2

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

ale kiedy narysować linię na to, uważam, że linia pojawiają się zarówno na img i rectImage, więc jak mogę to zrobić?

Odpowiedz

30

Jeśli używasz cv2, poprawną metodą jest użycie metody .copy() w Numpy. Tworzy kopię potrzebnej macierzy. W przeciwnym razie wygeneruje tylko widok tego obiektu.

np

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

Co oznaczają te wszystkie magiczne liczby? – raaj

+0

Są to tylko liczby w zakresie 0-100. Po prostu wypisz 'x' i' y' po każdym kroku. Wtedy otrzymasz pomysł. –

1

Można po prostu użyć standardowej biblioteki Pythona. Wykonaj płytką kopię oryginalnego obrazu w następujący sposób:

import copy 

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

Moja ulubiona metoda używa cv2.copyMakeBorder bez ramki, jak w przykładzie.

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

Pierwsza odpowiedź jest poprawna, ale mówisz, że używasz cv2, który z natury używa numpy tablic. Tak więc, aby utworzyć pełną kopię "myImage":

newImage = myImage.copy() 

Powyższe jest wystarczające. Nie ma potrzeby importowania numpy.