1

如何返回二维数组中特定值的索引?

这是我到目前为止所做的:

Mat *SubResult;

for(int i=0; i < height; i++){
    for(int j=0; j< width; j++){
       if(SubResult[i][j]<0){
          return [i][j];
       }
    }
}

这是我在您解释后所做的,但仍然出现错误:

void Filter(float* currentframe, float* previousframe, float* SubResult){

int width ;
int height ; 
std::vector< std::pair< std::vector<int>, std::vector<int> > > Index;
cv::Mat curr = Mat(height, width, CV_32FC1, currentframe);
cv::Mat prev = Mat(height, width, CV_32FC1, previousframe);
//cv::Mat Sub = Mat(height, width, CV_32FC1, SubResult);
cvSub(currentframe, previousframe, SubResult);
cv::Mat Sub = Mat(height, width, CV_32FC1, SubResult);

for(int i=0; i < height; i++){
    for(int j=0; j< width; j++){
       if(Sub[i][j] < 0){
         Index.push_back(std::make_pair(i,j));
       }
     }

}

} }

4

3 回答 3

3

用作pair<int,int>您的返回类型,并返回这样的一对:

return make_pair(i, j);

在接收端,调用者需要访问该对的元素,如下所示:

pair<int,int> p = find_2d(.....); // <<== Call your function
cout << "Found the value at (" << p.first << ", " << p.second << ")" << endl;
于 2013-10-22T10:37:50.890 回答
1

您可以将其作为结构返回:

struct Index
{
   std::size_t i, j;
};

return Index{i, j};

另一种方法是std::pair

return std::make_pair(i, j);
于 2013-10-22T10:38:11.423 回答
0

为确保您的函数可以与 的现有有效实例一起使用Mat,请通过引用传递(因为它不会更改矩阵,所以将其设为const)。然后您可以返回一个std::pair或只是简单地填充通过引用传递的参数并返回bool表示成功:

bool foo(const Mat& img, int& x, int& y) {
    for(int i = 0; i < img.rows; i++) {
        for(int j = 0; j < img.cols; j++) {
           if(img[i][j] < 0) {
              x = j;
              y = i;
              return true;
           }
        }
    }
    return false;
}
于 2013-10-22T10:39:51.453 回答