如何在OpenCV中访问高维矩阵的元素?

时间:2015-05-26 06:39:55

标签: c++ pointers opencv matrix

我试图在OpenCV中使用4-d矩阵,初始化部分如下所示:

var val = CloudConfigurationManager.GetSetting(key);

但图书馆不允许我使用' at'来访问feature_points的元素。像这样:

int feature_points_size[] = {bincellDim.x , bincellDim.y , bincellDim.z , 100};
feature_points.create(4 , feature_points_size , CV_64F);

似乎是Mat.at<>没有4个输入的版本 什么是访问其元素的最佳实践?

提前thx!

2 个答案:

答案 0 :(得分:1)

cv::Mat::at<>确实有一个n-dim过载,你需要使用T& Mat::at(const int* idx)版本。
或者,只需为它编写自己的(外部)包装器,就像这样:

at4D<double>(feature_points,k,j,i,l);

答案 1 :(得分:0)

仅以@Adi-Shavit 的回答为例:

std::vector<int> dims = {1, 3, 700, 400};
cv::Mat mat4d = cv::Mat(std::vector<int>, CV_32FC1);
int p[4];
p[0] = 0;
for (unsigned hi=0; hi<dims[3]; hi++) {
    p[3] = hi;
    for (unsigned wi=0; wi<dims[2]; wi++) {
        p[2] = wi;
        for (unsigned ci=0; ci<dims[1]; ci++) {
            p[1] = ci;
            float value = mat4d.at<float>(&p[0]);
            mat4d.at<float>(&p[0]) = some_new_value;
        }
    }
}