12

我将findHomographyOpenCV 的功能与 RANSAC 方法一起使用,以找到将与一组关键点链接的两个图像相关联的单应性。

主要问题是我无法在任何地方找到函数输出的掩码矩阵的值。

我知道的唯一信息是 0 值是异常值,非零值是异常值。但这意味着内部值是什么?有人知道吗?

我调用的一段代码findHomography

cv::Mat H12;
cv::Mat mask;

H12 = cv::findHomography(FvPointsIm1, FvPointsIm2, mask, CV_RANSAC, 5); 
ui->Debug_Label->setText(Mat2QString(mask));
4

2 回答 2

15

返回的掩码findHomography是一个 8 位的单通道cv::Mat(或者std::vector<uchar>,如果您愿意),包含01指示异常值状态。

编辑:您通过调用访问掩码的每个元素.at<double>,这会导致输出混乱。您应该使用.at<uchar>,它将正确解释矩阵值。

于 2013-04-04T16:25:52.897 回答
2

我在应用关键点匹配后使用了findHomography方法。

  • 内点 是匹配的关键点,计算为真阳性(正确匹配);
  • 异常值 是被计算为误报(错误匹配)的匹配关键点。

然后,您可以使用掩码输出从所有匹配项中提取正确匹配项的子集。

  • Python 3.6 & OpenCV 3.4.1 中有一个例子:

    good_kp = [gray_kp[m.queryIdx].pt for m in good_matches]
    correct_matched_kp = [good_kp[i] for i in range(len(good_kp)) if mask[i]]
    
于 2018-06-26T08:12:25.957 回答