#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)