我想叠加一组相同大小的图像(AT& T面部图像数据库)。我已经编写了代码来执行此操作,其工作方式如下:
要修复错误,我尝试的是在每次迭代后调整图像大小,以便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()