OpenCV 矩阵算术运算

标签 opencv matrix

有人可以解释以下完全不直观的结果吗:

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 矩阵算术运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22511645/

相关文章:

python - 使用 python 求解非方阵 A 的 Ax =b

python - SimpleCV NameError:名称 'images'未定义

c++ - opencv C++ 中非均匀光照物体的检测

ios - HDR成像opencv 3.1和swift 4.2图像旋转90度

arrays - 如何在 MATLAB 中删除向量中一组索引处的元素?

C-分配内存的函数

android - 使用带有 Android NDK 的 OpenCV 转换数据格式

c# - OpenCV C# - 检测静态图像中的简单对象

python - Numpy - 多个 3d 数组与 2d 数组

c++ - 删除动态分配的二维数组时发生错误?