opencv矩阵括号运算符

dum*_*mpy 2 opencv matrix operator-keyword

我在很多例子/教程中都注意到人们使用大括号操作符"()"进行矩阵访问,这在某些情况下让我感到困惑.

问题是:假设我们有一个名为M的*m矩阵(例如3x4).通过"M(0)"或"M(1)"或任何其他奇异参数访问它将返回哪些元素在牙箍内?我认为你应该指定行和列(如"M(0,1)"或类似的东西).

Sam*_*Sam 6

你看到的是线性索引访问 - 即以线性方式直接访问内存.

在矩阵中,所有元素都存储在一个大的内存块中,每一行都跟在前一个后面.这就是为什么,如果你想要在(i, j)你所写的位置访问一个元素,就像

elem = matrix(j + rowWidth*i)
Run Code Online (Sandbox Code Playgroud)

但你可以简单地访问它

elem = matrix(k)
Run Code Online (Sandbox Code Playgroud)

当您不关心行/列位置时,这很有用,例如,当您总结矩阵中的所有元素时:

count = width*height;
sum=0;
for(i=0;i<count;i++)
    sum+=matrix(i);
Run Code Online (Sandbox Code Playgroud)

或者当你有预先计算的线性指数时.

请注意,如果矩阵不会存储在连续的内存块中(例如,更大矩阵中的感兴趣区域),此技术可能会产生一些最疯狂的错误.if (myMat.isContinuous())在使用线性索引之前务必检查!