不支持的操作数类型:'NoneType' 和 'list' 进行 += 运算

1 投票
1 回答
12432 浏览
提问于 2025-04-17 23:36

你好,我写了一段代码,用来通过归一化互相关的方法来找出图片之间的相似度。但是我遇到了一个错误,搞不清楚是什么原因。有没有人能帮我找出我的错误呢?提前谢谢大家! :)

from numpy import *
from PIL import Image
from scipy import misc
import sys
import math
import numpy as np
import scipy.signal
import cv2
from cv2 import cv
path1='D:/PROJECT/database/453.png'
path2='D:/PROJECT/database/453.png'
im1=Image.open('D:/PROJECT/database/453.png')
im2=Image.open('D:/PROJECT/database/453.png')
#numpart=0
#denpart=0
numpart=[0.0,0.0,0.0,0.0]
denpart=[0.0,0.0,0.0,0.0]

pix1 = im1.load()
pix2=im2.load()
width=181
height=256
x1= misc.imread(path1)
x2= misc.imread(path2)
m1=x1.mean()
m2=x2.mean()
#print m2
for i in range(0,width):
    for j in range (0,height):
        y1=pix1[i,j]
        y2=pix2[i,j]
        nump1z1=y1-m1
        nump2z1=y2-m2
        n=nump1z1*nump2z1
        numpart+=n
        denp1z1=(y1-m1)**2
        denp2z1=(y2-m2)**2
        d=(denp1z1*denp2z1)
        e=map(math.sqrt,d)
        denpart+=e
ncc=numpart/denpart
print ncc 

1 个回答

2

简单来说,

numpart=[0.0,0.0,0.0,0.0]
...
numpart += n

你想把 n 加到一个叫 numpart 的列表里,但这个列表并不是这样设计的。你可以试试 .append() 方法,像这样 numpart.append(n),这样可以把 n 加到列表的最后面,或者

for number in range(0, numpart):
    numpart[number] += n

根据你的需求来选择。

另外:

ncc=numpart/denpart

这样做也不行,因为它们是列表。

再说一次,使用我刚才提到的那种方法,把 n 加到列表里的每个项上,这里也能用,只需要把 ncc[number] = numpart[number]/denpart[number] 这样写就可以了。

撰写回答