欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OpenCV计算图像PSNR峰值信噪比

程序员文章站 2023-12-31 18:45:04
...

均方误差定义:
OpenCV计算图像PSNR峰值信噪比

峰值信噪比定义:
OpenCV计算图像PSNR峰值信噪比

需要提前将所用的矩阵的datatype转为CV_32F

double getPSNR(const cv::Mat M1, const cv::Mat M2) {
    /// PSNR越大越好,单位dB
    M1.convertTo(M1, cv::CV_32F);
    M2.convertTo(M2, cv::CV_32F);
    cv::Mat diff(M1.size(), cv::CV_32F);

    cv::absdiff(M1, M2, diff);              // |M1 - M2|
    diff = diff.mul(diff);                  // |M1 - M2|^2
    cv::Scalar s = cv::sum(diff);           // sum elements per channel
    double N = M1.channels() * M1.total();  // total number of elements

    double sse;
    if (M1.channels() == 3)
        sse = s.val[0] + s.val[1] + s.val[2];
    else
        sse = s.val[0];
    if (sse > 1e6 || isnan(sse))  return 0;
    else {
        double  mse = sse / N;
        double psnr = 10.0 * log10((255 * 255) / (mse + 1e-6));
        return psnr;
    }
}

上一篇:

下一篇: