#include <cv.h>
#include <highgui.h>
#include<iostream>
using namespace std;
double getPSNR(const Mat& I1, const Mat& I2)
{
Mat s1;
absdiff(I1, I2, s1); // |I1 - I2|
s1.convertTo(s1, CV_32F); // cannot make a square on 8 bits
s1 = s1.mul(s1); // |I1 - I2|^2
Scalar s = sum(s1); // sum elements per channel
double sse = s.val[0] + s.val[1] + s.val[2]; // sum channels
if( sse <= 1e-10) // for small values return zero
return 0;
else
{
double mse =sse /(double)(I1.channels() * I1.total());
double psnr = 10.0*log10((255*255)/mse);
return psnr;
}
}
int main(){
IplImage *src1= cvLoadImage("001.jpg");
IplImage *src2= cvLoadImage("1.png");
long long int sigma = 0;
long long int squre = 0;
double MSE = 0.0;
double SNR = 0.0;
double P
图像的 SNR 和 PSNR 的计算
最新推荐文章于 2021-08-26 09:47:13 发布
本文展示了如何使用C++和OpenCV库计算图像的峰值信噪比(PSNR)和信噪比(SNR)。通过读取两幅图像,逐像素比较并计算均方误差(MSE)、平方和(sigma)以及图像的总平方值(squre),进而求得PSNR和SNR。最后,程序将输出这些数值。
摘要由CSDN通过智能技术生成