OpenCV:findHomography 生成一个空矩阵

OpenCV: findHomography generating an empty matrix

使用findHomography()时:

Mat H = findHomography( obj, scene, cv::RANSAC , 3, hom_mask, 2000, 0.995 );

有时,对于某些图像,生成的 H 矩阵保持为空(H 是 UINT8,1x0x0)。然而,两幅图像之间显然存在匹配(并且看起来检测到良好的关键点匹配),并且就在前一刻,对于具有相似关键点响应的两幅相似​​图像,生成了一个相关矩阵。输入参数"obj"和"scene"都是Point2f的向量,包含各种坐标。

这是一个常见问题吗?或者你认为某个地方可能潜伏着一个错误?就个人而言,我已经处理了数百张存在匹配的图像,虽然我有时看到匹配不佳,但这是我第一次得到一个空矩阵...

编辑: 这就是说,即使我的眼睛认为图像对应该匹配,我意识到它可能会将图像的某些部分与其他部分混淆一个,也许确实没有 "good" 匹配。

所以我的问题是:findHomography() 在无法找到合适的单应性时如何表现?它 return 是一个空矩阵还是它总是会给出一个单应性,尽管是一个非常差的单应性矩阵?我只想知道我是否遇到了标准行为,或者我自己的代码中是否存在错误。

你看,cv::findHomography() 函数可以 return 空单应矩阵(0 列 x 0 行)大约从 2.4.5 版本开始。 根据某些观点,这似乎只有在传递 cv::RANSAC 标志时才会发生。

查看报告的问题 here

It likely happened because we put in new experimental version of Levenberg-Marquardt solver, which does not work that well (maybe due to some bugs)

我建议在任何地方使用之前检查计算的单应性:

cv::Mat h = cv::findHomography(...)
if (!h.empty())
{
    // Use it
}