специальное условие объекта ‘numpy.float64’ невозможно вызвать

#python #opencv #mse

#python #opencv #mse

Вопрос:

я пытаюсь вычислить 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 и так далее, Это работает?? введите описание изображения здесь

Ответ №1:

Вы определяете функцию с именем mse() , но позже вызываете эту строку кода:

 mse=mse(result,recover)
  

При этом вы переопределили mse как нечто другое, и это больше не функция.

Используйте другое имя для сохранения результата вызова mse() .

 mse_output = mse(result,recover)
psnr=10*math.log10((255**2)/mse_output)