#includeusing namespace std; #include #include using namespace cv; //均方误差法图像质量评价(越大越差) void Mse(Mat& src1, Mat& src2) { double sum,sum1=0; int k = src1.rows * src2.cols; for (int i = 0; i < src1.rows; i++) { uchar* image1 = src1.ptr(i); uchar* image2 = src2.ptr(i); for (int j = 0; j < src1.cols; j++) { sum=pow((image1[j] - image2[j]), 2); sum1 += sum; } } double mse = sum1 / k; cout << mse << endl; } //峰值信噪比图像质量评价(越小越差) void PSNR(Mat& src1, Mat& src2) { double sum, sum1 = 0; int k = src1.rows * src2.cols; for (int i = 0; i < src1.rows; i++) { uchar* image1 = src1.ptr(i); uchar* image2 = src2.ptr(i); for (int j = 0; j < src1.cols; j++) { sum = pow((image1[j] - image2[j]), 2); sum1 += sum; } } double mse = sum1 / k; double l = pow(255, 2); double psnr = 10 * log10(l / mse); cout << mse << endl; cout << psnr << endl; } int main() { Mat src = imread("D:\VC\c++\opencv源码\opencv源码\6.jpg",IMREAD_GRAYSCALE);//读入图像 Mat src1 = imread("D:\VC\c++\opencv源码\opencv源码\7.jpg",IMREAD_GRAYSCALE);//读入图像 //判断是否为灰度图 if (src.channels() == 1 || src.channels() == 1) { Mse(src, src1); PSNR(src, src1); } else { cout << "您输入的图片不是灰度图" << endl; } system("pause"); return 0; }



