我不明白二维数组的地址Mat给定点的结构计算如下:
addr(M_ {i,j})= M.data + M.step [0] * i + M.step [1] * j
为什么???
M.step [i]> = M.step [i + 1](事实上,M.step [i]> = M.step [i + 1] * M.size [i + 1] )
例如,如果我们有一个大小为5X10的二维数组。我知道如何计算点(4,7)的地址的方式如下:
地址= 4 + 7 * 5
有人可以解释一下吗?
致以最诚挚的问候,
答案 0 :(得分:2)
1)你所说的地址是数组中的索引,而不是计算机内存中的地址。例如,如果您的数组占用10000到20000之间的内存,则点(0,0)的像素地址为10000,而不是0。
2)图像可能有多个通道,像素值可能使用多个字节。例如,如果您有3个通道的矩阵并且像素是整数(即4个字节),则步骤[1]是3x4 = 12个字节。此类数组中(0,5)处像素的地址为10000 + step [0] x 0 + 12 x 5.
3)此外,您的计算缺少矩阵在内存中可能不连续的事实,即在一行的结尾和下一行的开头之间可能存在一些差距。这也包含在步骤[0]中。
只是一个建议:不要过多地使用所有这些计算步骤。如果您需要访问图像使用功能中的随机像素' at()',如果您按行处理行,请使用' ptr()'获取指向行开头的指针。这将为您节省大量计算和潜在的错误。