使用 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_org
和 image_mod
只是同一对象的两个名称。
您需要复制原始图像:
image_mod = image_org.copy()
image_mod
将是一个不同的对象。
我正在尝试对图像进行一些修改 ('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_org
和 image_mod
只是同一对象的两个名称。
您需要复制原始图像:
image_mod = image_org.copy()
image_mod
将是一个不同的对象。