web-dev-qa-db-fra.com

Cloner une image dans cv2 python

Je suis nouveau à l'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 trace une ligne dessus, je trouve la ligne apparaissant à la fois sur img et sur rectImage, alors comment puis-je le faire?

36
tintin

Si vous utilisez cv2, La méthode correcte consiste à utiliser la méthode .copy() dans Numpy. Cela créera 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.
45
Abid Rahman K

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

newImage = myImage.copy()

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

53
Ash Ketchum

Vous pouvez simplement utiliser Python. Faites une copie superficielle de l’image originale comme suit:

import copy

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

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

copy = cv2.copyMakeBorder(original,0,0,0,0,cv2.BORDER_REPLICATE)
1
Jack Guy