使用 cv2.imread 加载图像时意外修改图像

Unexpected image modification when using cv2.imread for image loading

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

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

您需要复制原始图像:

image_mod = image_org.copy()

image_mod 将是一个不同的对象。