2013-05-14 3 views
21

Я новичок в opencv, вот вопрос, что такое функция python, которая действует так же, как cv :: clone() в cpp? Я просто стараюсь, чтобы получить прямоугольник поКлонировать изображение в cv2 python

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

, но когда я рисую линию на нем, я считаю, линия появляться как на IMG и rectImage, так, как я могу получить это сделано?

ответ

30

Если вы используете 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. 
+1

Что означают все эти магические числа – raaj

+0

Это всего лишь цифры в диапазоне 0-100. Просто напечатайте 'x' и' y' после каждого шага. Тогда вы получите эту идею. –

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

Первый ответ правильный, но вы говорите, что используете cv2, который по своей сути использует массивы numpy. Итак, чтобы сделать совершенно другую копию слова «myImage»:

newImage = myImage.copy() 

Вышесказанное достаточно. Нет необходимости импортировать numpy.

Смежные вопросы