OpenCV对矩阵的算术运算



谁能解释一下下面这个完全不直观的结果:

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];

编辑:

我的看法:这是一个不能再修复的遗留bug,因为它具有追溯性,会影响很多项目。此外,它将非常讨厌调试(除非项目已经非常彻底的单元测试)

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]

相关内容

  • 没有找到相关文章

最新更新