psnr的opencv代码
时间: 2023-12-06 18:01:20 浏览: 38
PSNR是Peak Signal-to-Noise Ratio的缩写,是一种用于衡量图像质量的指标。在OpenCV中,可以使用以下代码来计算两个图像之间的PSNR值:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
double getPSNR(const Mat& I1, const Mat& I2)
{
Mat s1;
absdiff(I1, I2, s1); // |I1 - I2|
s1.convertTo(s1, CV_32F); // 为了避免溢出,转换为32位浮点型
s1 = s1.mul(s1); // (I1 - I2)^2
Scalar s = sum(s1); // 对每个通道求和
double sse = s.val[0] + s.val[1] + s.val[2]; // 求出总的平方误差
if (sse <= 1e-10) // 如果误差非常小,PSNR为0
return 0;
else
{
double mse = sse / (double)(I1.channels() * I1.total()); // 均方误差
double psnr = 10.0 * log10((255 * 255) / mse); // 计算PSNR值
return psnr;
}
}
int main()
{
Mat img1 = imread("image1.jpg"); // 读取第一张图像
Mat img2 = imread("image2.jpg"); // 读取第二张图像
double psnr_value = getPSNR(img1, img2); // 计算两个图像之间的PSNR值
cout << "PSNR 值为: " << psnr_value << endl;
return 0;
}
```
在这段代码中,首先定义了一个getPSNR函数用于计算两个图像的PSNR值。然后在主函数中,读取了两张图像,并调用getPSNR函数计算它们之间的PSNR值。最后输出了计算得到的PSNR值。通过这段代码,可以方便地对图像的质量进行评估。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)