代码之家  ›  专栏  ›  技术社区  ›  KorwinNaSloniu

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

  •  0
  • KorwinNaSloniu  · 技术社区  · 8 年前

    我正在尝试对图像进行一些修改(“some\u image.jpeg”)。 因此,我将其加载到变量:image\u org和image\u mod中。 在image\u mod i want do modifications中,image\u org i want to keep unchanged for later comparizions中,image\u mod i want do modifications,image\u org i want to keep unchanged for later comparizions中,我希望在。 在对image\u mod进行一些更改后(基本上在上面画一些线)。 我正在创建一个新图像,这是修改后的图像和原始图像之间的差异:image\u diff=cv2。减去(image\u mod,image\u org)。 我使用:diff\u num=cv2将差值计算为一个数字。sumElems(image\u diff)[0]并将所有3个图像保存到。png文件。 我希望获得: -与原始文件相同的图像(image\u org) -具有附加行的图像(image\u mod) -仅包含添加到image\u mod(image\u diff)的行的图像 -diff\u num是一个数字,相当大的数字 然而,我得到的是: -image\u org已更改,看起来与image\u mod完全相同 -diff\u num等于0.0

    我怀疑我在代码的前几行中犯了错误,但是我无法理解image\u 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 回复  |  直到 8 年前
        1
  •  1
  •   Thierry Lathuille    8 年前

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

    您需要复制原始图像:

    image_mod = image_org.copy()
    

    image\u mod 将是另一个对象。