我使用此代码加载/显示/写入图像(opencv_python-3.3.0-cp36-cp36m-win32):
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 :(得分: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