0

我正在尝试计算 MSE 以获得 PSNR 的输出

def mse(imageA, imageB):
  err = np.sum((imageA.astype("float") - imageB.astype("float")) ** 2)
  err /= float(imageA.shape[0] * imageA.shape[1])
  return err

if __name__ == '__main__':

  for i in range(1,7):
      result=cv2.imread('./ct-result/tr' + str(i) + '.bmp')
      recover = cv2.imread('./rs' + str(i) + '.bmp')
      mse=mse(result,recover)
      psnr=10*math.log10((255**2)/mse)
      print(psnr)

我在使用 for 循环计算 1~6 张图片时遇到了一个奇怪的情况,它显示 'numpy.float64' 对象在 2~6 张图片上不可调用 在此处输入图像描述

但是,当我将 str(i) 更改为诸如 2,3 之类的数字时...它起作用了,我不知道发生了什么请帮助我

您可以从上面的图片中看到该控制台显示循环的第一个输出,而以下是遇到“numpy.float64”对象不可调用

但是我只是将 str(i) 更改为 2,3 等等它可以工作吗? 在此处输入图像描述

4

1 回答 1

1

您定义了一个名为 的函数mse(),但稍后您调用了这行代码:

mse=mse(result,recover)

在这样做时,您已经重新定义mse为其他东西,并且它不再是一个函数。

使用不同的名称来存储调用的结果mse()

mse_output = mse(result,recover)
psnr=10*math.log10((255**2)/mse_output)
于 2019-03-15T16:01:48.570 回答