gpt4 book ai didi

c++ - 计算两幅图像的均方误差

转载 作者:太空狗 更新时间:2023-10-29 21:22:41 25 4
gpt4 key购买 nike

我正在尝试使用以下代码计算两个图像的 MSE:-

void getMSE(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


double mse = sse / (double)(I1.channels() * I1.total());

printf("mse = %f", mse);

}

它没有成功运行,我想知道你们是否有任何想法?如果图像大小不同,这段代码会不会运行? VS10 说我有一个运行时错误,至少可以说是模糊的!

提前致谢

最佳答案

是的,图片必须大小相同。如果它们的大小不同,absdiff 如何进行元素减法? getMSE() 应该检查 I1I2 是否大小相同,如果它们没有引发异常或以某种方式使它们大小相同(例如,通过填充或 resize() )。

例如:

 Mat I2_resized;
resize(I2, I2_resized, I1.size());
absdiff(I1, I2_resized, s1);
...

您的代码改编自an OpenCV tutotial - 我觉得很合适,所以只要确保图片大小相同即可。

关于c++ - 计算两幅图像的均方误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20029335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com