2017-09-11 49 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

很高兴知道:) –