gpt4 book ai didi

c++ - OpenCV:findHomography 生成一个空矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:37 26 4
gpt4 key购买 nike

当使用 findHomography() 时:

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

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

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

编辑: 这就是说,即使我的眼睛认为图像对应该匹配,我意识到它可能会将图像的某些部分与另一部分混淆,并且可能存在确实没有“好的”匹配。

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

最佳答案

你看,cv::findHomography() 函数大约从 2.4.5 版本开始可以返回空的单应矩阵(0 列 x 0 行)。根据某些观点,这似乎只有在传递 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
}

关于c++ - OpenCV:findHomography 生成一个空矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28331296/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com