OpenCV错误:该操作既不是'数组操作数组'

时间:2017-12-16 18:46:24

标签: python image opencv image-processing

我想叠加一组相同大小的图像(AT& T面部图像数据库)。我已经编写了代码来执行此操作,其工作方式如下:

  1. 我已经指定了图像的位置(开始时我只考虑了4张图像)。
  2. imstack用于读取将在其上进行停留(叠加)的一个图像(作为基本图像)。
  3. 运行for循环,遍历所有图像并将它们添加到基本图像(imstack)。此添加是通过使用addWeighted()函数完成的,其中参数为当前图像(im),基本图像(imstack)的alpha值分别为0.5。
  4. 循环运行直到完成(所有图像叠加在基本图像上)后,我尝试打印更新的imstack作为' compiledimg'通过使用imshow()。
  5. 此外,我添加了保存' compiledimg'通过按'
  6. 来归档

    要修复错误,我尝试的是在每次迭代后调整图像大小,以便addWeighted()函数接收具有相同尺寸的图像。第一个imsize(在进入for循环之前)被调整大小,以便为第一个图像设置一个坚实的基础,具有我所需的大小(97(行),113(列))。

    我不明白为什么addWeighted函数不起作用,因为我使用resize函数来确保每次迭代后大小保持不变。另外,如果还试图仅叠加两个图像并且它工作得很好,但是当我尝试在第三个图像上使用addWeighted()时它不起作用。

    假设我在两个图像img1和img2上使用addWeighted并存储在img3中。现在,当我尝试在img3和img4上使用addWeighted()时,我收到错误。即使我在img3上使用了resize功能。

    注意: 图像的初始大小是(97(行),113(列))因此我试图保持相同的图像大小。

    import cv2 
    import numpy as np
    import os
    
    fnames =['~/Downloads/1.pgm','~/Downloads/2.pgm','~/Downloads/3.pgm']
    imstack=cv2.imread('~/Downloads/4.pgm')
    
    for path in fnames:
    
      im=cv2.imread(os.path.expanduser(path))
    
      im=cv2.resize(im,(97,113))
    
      imstack=cv2.addWeighted(imstack,0.5,im,0.5,0)
    
      imstack=cv2.resize(imstack,(97,113))
    
    cv2.imshow('compiledimg',imstack)
    
    k = cv2.waitKey(0) & 0xFF
    
    if k == 27:         
    cv2.destroyAllWindows()
    
    elif k == ord('s'): 
    cv2.imwrite('compiledimg.pgm',imstack)
    cv2.destroyAllWindows()
    

0 个答案:

没有答案