2017-09-11 84 views
0

我使用此代碼加載/顯示/寫入圖像錯誤的圖像(opencv_python-3.3.0-CP36-cp36m-win32)中:imshow似乎表明

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() 

注意,7號線應該顯示原始圖像img0,但它顯示修改後的圖像img1(即紅色矩形)。第3行應該創建img0的臨時副本,而不是修改img0。這裏有什麼問題?

回答

0

在mat變量之間使用賦值運算符(=)時,實際上並未複製數據,而是共享該引用。因此,一個人的變化正在被另一個人所反映。請結帳:http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#mat-operator

你需要使用clone()或copyTo()來實現你想要的。看看這裏:http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#mat-clone

+0

你的解釋是有道理的。但由於我使用Python(而不是C++),我用img1 = img0.copy()替換了第3行,現在它可以工作。謝謝。 – NP1

+0

很高興知道:) –