如何从C ++中的矩阵(Mat)返回特定值的索引?

时间:2013-10-22 10:35:37

标签: c++ opencv matrix return return-value

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

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

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));
       }
     }

}

} }

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

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

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

return Index{i, j};

另一种方式是std::pair

return std::make_pair(i, j);

答案 2 :(得分: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;
}