SiftGPU 和 opencv::FundamentalMat

SiftGPU and opencv::FundamentalMat

我正在尝试使用 cv::FindFundamentalMat 但是当我尝试获取第 4 个参数时(应该是:

Output array of N elements, every element of which is set to 0 for outliers and to 1 for the other points. The array is computed only in the RANSAC and LMedS methods. For other methods, it is set to all 1’s. )

它只给我 0。
我正在使用 siftGPU 生成函数中使用的关键点 (x,y)。

我的代码:

/*
... Use siftgpu 
*/
std::vector<int(*)[2]> match_bufs; //Contain (x,y) from the 2 images that are paired
SiftGPU::SiftKeypoint & key1 = keys[match_bufs[i][0]];
SiftGPU::SiftKeypoint & key2 = keys[match_bufs[i][1]];


float x_l, y_l, x_r, y_r; //(x,y of left and right images)
x_l = key1.x; y_l = key1.y;
x_r = key2.x; y_r = key2.y;

vec1.push_back(x_l); vec1.push_back(y_l);
vec2.push_back(x_r); vec2.push_back(y_r); 
std::vector<uchar> results;
int size = vec1.size();
results.resize(size);

std::vector<cv::Point2f> points1;
std::vector<cv::Point2f> points2;

for (int i = 0; i < size; i+=2) {
    points1.push_back(cv::Point2f(vec1[i], vec1[i + 1]));
    points2.push_back(cv::Point2f(vec2[i], vec2[i + 1]));
}

cv::Mat fund = cv::findFundamentalMat(points1, points2, CV_FM_RANSAC, 3, 0.99, results);

然后,

std::cout << std::endl << fund << std::endl;
for (int j = 0; j < results.size(); ++j) {
    std::cout << (int)results[j];
}

基金是:

   0, -0.001,  0.6
   0,      0, -0.3
-0.4,    0.2,    0 

并且结果仅由 0 组成。

我可能是在自欺欺人,因为 findFundamentalMat 说:

Array of N points from the first image. The point coordinates should be floating-point (single or double precision).

因为我的母语不是英语,所以我可能遗漏了一些东西...我的 (x,y) 就像 (350.0, 560.0)(即浮点数)。但是我是否必须在 [0,1] 之间对它们进行归一化,这就是浮点数的意思?

还是我遗漏了什么?

谢谢!

(EDIT : 我试图标准化我的点(除以各个图像的高度和宽度,但结果仍然是 0)

答案很简单:我必须为模板使用好的格式并很好地转换它。 所以 : ((int)results.at<uchar>(i, 0) == 1) 有效:)

如果对某人有帮助。