Cloner une image dans cv2 python

Je suis nouveau sur opencv, voici une question, Quelle est la fonction python qui agit de la même manière que cv:: clone () dans cpp? J'essaie juste d'obtenir un rect par

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

Mais quand je dessine une ligne dessus, je trouve que la ligne apparaît à la fois sur img et le rectImage, alors, comment puis-je faire cela?

29
demandé sur tintin 2013-05-14 04:05:07

4 réponses

Si vous utilisez cv2, la méthode correcte consiste à utiliser la méthode .copy() dans Numpy. Il va créer une copie du tableau dont vous avez besoin. Sinon, il ne produira qu'une vue de cet objet.

Par exemple:

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.
36
répondu Abid Rahman K 2013-05-14 05:01:20

La première réponse est correcte mais vous dites que vous utilisez cv2 qui utilise intrinsèquement des tableaux numpy. Donc, pour faire une copie différente complète de say "myImage":

newImage = myImage.copy()

Ce qui précède est suffisant. Pas besoin d'importer numpy.

34
répondu Ash Ketchum 2016-04-29 07:52:13

Vous pouvez simplement utiliser la bibliothèque standard Python. Faire une copie de l'image originale comme suit:

import copy

original_img = cv2.imread("foo.jpg")
clone_img = copy.copy(original_img)
2
répondu yildirim 2015-04-21 14:00:43

Ma méthode préférée utilise cv2.copyMakeBorder sans frontière, comme ça.

copy = cv2.copyMakeBorder(original,0,0,0,0,cv2.BORDER_REPLICATE)
1
répondu Harangue 2015-05-14 00:32:02