我正在尝试对图像进行一些修改('some_image.jpeg')。 出于这个原因,我将它加载到变量:image_org和image_mod。 在image_mod我想做修改,image_org我想保持不变为以后的比较。 在对image_mod进行一些更改之后(基本上在其上绘制一些线条)。 我正在创建一个新图像,它是修改后的图像与原始图像之间的差异:image_diff = cv2.subtract(image_mod,image_org)。 我将差值计算为一个数字:diff_num = cv2.sumElems(image_diff)[0]并将所有3个图像保存到.png文件中。 我正在表示要获得: - 与原始文件(image_org)相同的图像 - 图像上有其他线条(image_mod) - 仅添加到image_mod(image_diff)的行的图像 - diff_num是一个数字,相当大的数字 然而,我得到了: - image_org已更改,看起来与image_mod完全相同 - diff_num等于0.0
我认为我在代码的前几行中犯了错误,但我无法理解image_org是如何用我的代码修改的。请帮助解决这个问题,这样我就可以得到我想要得到的东西。
import cv2
image_org = cv2.imread('some_image.jpeg',0)
image_mod = image_org
for i in range(10):
cv2.line(image_mod,(100+i*5,0),(0+i*5,150),(255),1,16)
image_diff = cv2.subtract(image_mod, image_org)
diff_num = cv2.sumElems(image_diff)[0]
cv2.imwrite('test_org.png',image_org)
cv2.imwrite('test_mod.png',image_mod)
cv2.imwrite('test_dif.png',image_diff)
print(diff_num)
答案 0 :(得分:1)
image_org
和image_mod
只是同一个对象的两个名称。
您需要制作原始图片的副本:
image_mod = image_org.copy()
image_mod
将成为另一个对象。