我知道在内存中opencv将Mat对象表示为一个大数组 . 因此,如果我有3个尺寸为200x200的通道垫,那么在内存中它会将这个垫存储在3x200x200大小的数组中 . 或者更常见的是,内存中的任何Mat都将存储为 channels*rows*cols
. 我们可以得到这样的数组
double *array = (double)mat.data;
假设矩阵是double类型
现在我的问题是,如果我想访问通道ch中的元素,行r和col c以下是有效的索引,那么索引此数组的方法是什么?
array[ch*rows*cols + c * rows + r]
要么
array[ch*rows*cols + r * cols + c]
关心Ahsan
3 回答
正如您在documentation上报告的数据布局中所看到的,您可以访问以下值:
您可以像这样获取数组中的值:
我发现其他答案有点令人困惑:
mat.step
是以字节为单位的行的大小,而不是(双)元素,并且它已经考虑了通道的数量 . 要访问val,您应该使用:您可以验证此方法和其他方法,将它们与
.at<>
运算符进行比较,如下所示: