2017-09-11 7 views
0

ich diesen Code verwenden zu laden/Show/schreiben Bilder (opencv_python-3.3.0-cp36-cp36m-win32):imshow scheint das falsche Bild zu zeigen

import cv2 
img0 = cv2.imread('original.jpg',1) 
img1=img0 
for i in range(img0.shape[0]): 
    for j in range(img0.shape[1]): 
     img1[i,j]=[0,0,255] 
cv2.imshow('original',img0) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

Beachten Sie, dass die Leitung 7 sollte zeige das Originalbild img0, aber es zeigt stattdessen das modifizierte Bild img1 (dh ein rotes Rechteck). Zeile 3 soll eine temporäre Kopie von img0 erstellen, nicht um img0 zu ändern. Was ist hier falsch?

Antwort

0

Wenn Sie den Zuweisungsoperator (=) zwischen den Mat-Variablen verwenden, kopieren Sie nicht die Daten, sondern teilen die Referenz. Daher wird die Veränderung in einem in einem anderen reflektiert. Bitte gehen Sie zur Kasse: http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#mat-operator

Sie müssen clone() oder copyTo() verwenden, um zu erreichen, was Sie wollen. Überprüfen Sie sie hier: http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#mat-clone

+0

Ihre Erklärung ergibt Sinn. Aber da ich Python (nicht C++) verwende, habe ich Zeile 3 durch img1 = img0.copy() ersetzt und jetzt funktioniert es. Vielen Dank. – NP1

+0

Gut zu wissen :) –

Verwandte Themen