使用cv2.imread进行图像加载时出现意外的图像修改

时间:2018-02-18 11:10:37

标签: python image cv2

我正在尝试对图像进行一些修改('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)

1 个答案:

答案 0 :(得分:1)

image_orgimage_mod只是同一个对象的两个名称。

您需要制作原始图片的副本:

image_mod = image_org.copy()

image_mod将成为另一个对象。