有人可以解释以下完全不直观的结果:
Mat_<Vec3f> mat(Size(3,3),0);
Mat_<Vec3f> mat_add = (mat + 9);
Mat_<Vec3f> mat_add_div = (mat + 9) / 3;
神奇的是,我对此没有任何其他解释:
mat_add = [9,0,0,9,0,0,9,0,0];
mat_add_div = [3,3,3,3,3,3,3,3,3];
编辑:
我的看法:这是一个遗留错误,无法修复,因为它具有追溯力,会影响很多项目。调试也很讨厌(除非项目已经进行了相当详尽的单元测试)
最佳答案
Mat_<Vec3f> mat_add = (mat + 9);
相当于
Mat_<Vec3f> temp(Size(3,3),Vec3f(9,0,0));
Mat_<Vec3f> mat_add = mat+temp;
所以,你会得到
mat_add =
[9, 0, 0, 9, 0, 0, 9, 0, 0;
9, 0, 0, 9, 0, 0, 9, 0, 0;
9, 0, 0, 9, 0, 0, 9, 0, 0]
但是,我不知道为什么您会得到类似
mat_add_div
的值。实际上,如果您将其替换为:Mat_<Vec3f> mat_add_div = mat_add / 3;
你最终会得到
mat_add_div =
[3, 0, 0, 3, 0, 0, 3, 0, 0;
3, 0, 0, 3, 0, 0, 3, 0, 0;
3, 0, 0, 3, 0, 0, 3, 0, 0]
然而,基于与上述相同的理论,该结果是合理的。
关于opencv - 矩阵的OpenCV算术运算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22511645/