2016-04-03 13 views
1

Ich verwende Python und OpenCV 3 für die Bildverarbeitung.Python und OpenCV - Warum kann ein mit OpenCV bearbeitetes Bild das Originalbild noch beeinflussen?

So habe ich ein Bild wie folgt abgeschnitten:

image = cv2.imread('image_path') 
cropped = image[0:100, 0:100] 

Als ich die cropped als Argument an eine Funktion zu verwenden, das heißt ich die Kanten in den cropped erkennen, anwenden Transformation Hough und dann machen Linie darauf, bemerkte ich, dass die gleiche Linie auch auf das Original image gezogen wird. Warum das? Bedeutet das, dass das cropped Bild irgendwie immer noch mit dem Original image verbunden ist?

Antwort

2

Die Opencv-Bilddaten in Scheiben geschnitten ist eine Referenz mit unterschiedlicher Geometrie und keine Kopie. Sie sind nummerische Arrays. Aus der numpy docs bei http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#basic-slicing-and-indexing:

alle Arrays von Grunde Slicing erzeugen immer Blick auf den ursprünglichen Array.

Um eine Kopie zu erzwingen, verwenden Sie cropped=np.array(image, copy=True)[0:100, 0:100].

+0

Danke! Einfache, sehr leicht verständliche Erklärung! – Hilman