我知道在内存中opencv将Mat对象表示为一个大数组。因此,如果我有3个尺寸为200x200的垫子,则它将在内存中将该垫子存储在尺寸为3x200x200的数组中。或更笼统地说,内存中的任何Mat都将存储为channels*rows*cols。我们可以得到这样的数组
double *array = (double)mat.data;
Run Code Online (Sandbox Code Playgroud)
假设矩阵的类型为double
现在我的问题是,例如,如果我想访问通道ch,行r和col c的元素,该数组的索引方式是什么?
array[ch*rows*cols + c * rows + r]
Run Code Online (Sandbox Code Playgroud)
要么
array[ch*rows*cols + r * cols + c]
Run Code Online (Sandbox Code Playgroud)
问候阿山
正如您在文档中报告的数据布局中所见,您可以访问以下值:
for(int r=0; r<rows; ++r){
for(int c=0; c<cols; ++c){
for(int ch=0; ch<nchannels; ++ch){
double val = array[(nchannels*mat.step*r) + (nchannels*c) + ch];
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4614 次 |
| 最近记录: |