【发布时间】:2013-11-17 09:52:04
【问题描述】:
我正在尝试使用以下代码计算两个图像的 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 说我有一个运行时错误,至少可以说是模糊的!
在此先感谢
【问题讨论】:
-
你得到了什么确切的运行时错误?在“double sse ...”这一行上,您假设所有图像都有 3 个通道,而在下一行,您将获得 I1.channels()。也许你应该像这样在第一行添加一个断言: I1.channels() == I2.channels() && I1.channels() == 3
标签: c++ visual-studio-2010 opencv