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?
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.
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.
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)
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)