我知道在内存中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 次  |  
        
|   最近记录:  |