PSNR的OpenCV实现对于两个相同的图像返回值361

问题描述 投票:1回答:1

我正在使用python测试OpenCV的PSNR实现,结果很奇怪。

我试图计算两个相同图像之间的PSNR:该值应该是错误的,因为MSE应该等于零。但是,结果等于361!有人可以向我解释为什么我们得到这样的结果吗?

import cv2
img1 = cv2.imread("image1.png")
img2 = cv2.imread("image1.png")
psnr = cv2.PSNR(img1,img2)
print(psnr)
python opencv
1个回答
3
投票

PSNR的实现可以在here中找到。

最后两行是:

double diff = std::sqrt(norm(_src1, _src2, NORM_L2SQR)/(_src1.total()*_src1.channels()));

return 20*log10(R/(diff+DBL_EPSILON));

一个小值DBL_EPSILON被添加到分母,以防止被零除。

#include <iostream>
#include <float.h> // For DBL_EPSILON
#include <math.h>

int main()
{
    int R = 255; // default value
    double diff = 0;
    std::cout << 20*log10(R/(diff + DBL_EPSILON)) << std::endl;
}

C ++中的上述程序将打印361.201的值,该值与在Python中打印的值相同。

© www.soinside.com 2019 - 2024. All rights reserved.