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

C++ 如何在OpenCV中访问高维矩阵的元素?,c++,pointers,opencv,matrix,C++,Pointers,Opencv,Matrix,我尝试在OpenCV中使用一个4-d矩阵,初始化部分如下所示: int feature_points_size[] = {bincellDim.x , bincellDim.y , bincellDim.z , 100}; feature_points.create(4 , feature_points_size , CV_64F); feature_points.at<double>(k , j , i , l) = stickfea_code.at<double>(

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

int feature_points_size[] = {bincellDim.x , bincellDim.y , bincellDim.z , 100};
feature_points.create(4 , feature_points_size , CV_64F);
feature_points.at<double>(k , j , i , l) = stickfea_code.at<double>(l , 0);
feature_points.at<double>(k , j , i , l + 50) = countfea_code.at<double>(l , 0);
但该库不允许我使用“at”访问功能点的元素,如下所示:

int feature_points_size[] = {bincellDim.x , bincellDim.y , bincellDim.z , 100};
feature_points.create(4 , feature_points_size , CV_64F);
feature_points.at<double>(k , j , i , l) = stickfea_code.at<double>(l , 0);
feature_points.at<double>(k , j , i , l + 50) = countfea_code.at<double>(l , 0);
(k,j,i,l)处的特征点=在(l,0)处的粘滞区域代码; (k,j,i,l+50)处的特征点=在(l,0)处的计数代码; Mat.at似乎没有4个输入的版本 访问it元素的最佳实践是什么

提前谢谢

cv::Mat::at
确实有n-dim重载,您需要使用该版本。
或者,只需为其编写您自己的(外部)包装器,您可以这样使用:

at4D<double>(feature_points,k,j,i,l);
at4D(特征点k、j、i、l);

仅以@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;
        }
    }
}
std::vector dims={1,3700400};
cv::mat4d=cv::Mat(标准::向量,cv_32FC1);
int-p[4];
p[0]=0;
对于(无符号hi=0;hi