gpt4 book ai didi

arrays - 理解Opencv的CV Mat结构中的地址计算

转载 作者:太空宇宙 更新时间:2023-11-03 22:31:11 27 4
gpt4 key购买 nike

我不明白给定点的二维数组 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

有人可以解释一下吗??

最好的问候,

最佳答案

1) 你所说的地址是数组中的索引,而不是计算机内存中的地址。例如,如果您有一个占用内存在 10000 到 20000 之间的数组,则点 (0,0) 处的像素地址为 10000,而不是 0。

2) 图像可能有多个 channel ,像素值可能使用多个字节。例如,如果您的矩阵有 3 个 channel 并且像素是整数(即 4 个字节),那么 step[1] 是 3x4=12 个字节。此类数组中 (0,5) 处的像素地址将为 10000 + step[0] x 0 + 12 x 5。

3) 你的计算也忽略了矩阵在内存中可能不连续的事实,即在一行的末尾和下一行的开始之间可能有一些差距。这也包含在步骤 [0] 中。

只是一个建议:不要为所有这些步骤计算而烦恼。如果您需要访问图像中的随机像素,请使用函数“at()”,如果您按顺序处理行,请使用“ptr()”获取指向行开头的指针。这将为您节省大量计算和潜在错误。

关于arrays - 理解Opencv的CV Mat结构中的地址计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24113172/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com