如何在二维数组中返回特定值的索引?
这是我到目前为止所做的事情:
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));
}
}
}
} }
答案 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;
}