如何转换图像以匹配 OpenCV 中的圆形模型

How can I transform an image to match a circular model in OpenCV

我正在尝试制作一个可以拍摄飞镖盘图像并读取分数的程序。到目前为止,我可以通过将每个飞镖与模型图像进行比较来获得每个飞镖的位置,如您在此处所见:

然而,这仅在输入图像几乎相同时才有效。在另一种情况下,电路板的视角略有不同,所以我在想也许我可以转换图像以匹配模型图像,然后执行您在上面看到的过程。

所以我的问题是:如何使用 OpenCV 转换最后一张图像以匹配模型飞镖板的形状和透视?

飞镖盘基本上是平面的。因此,您可以通过单应性对所需的转换进行建模。现在您可以执行简单的特征提取和匹配,如 here or if speed is not as important utilize an intensity based parametric alignment algorithm(更准确)。

但是,正如评论中已经提到的那样,以后就不会那么简单了。飞镖飞行(取决于失真)很可能会覆盖您棋盘上与实际分数不一致的区域。其实就算是正面也很难说。

我假设你必须找到飞镖在你的棋盘上的停留点。此外,我认为从某个角度来看这会更容易。也许,您可以只在您事先检测到差异的区域拟合线段。

我认为将图像与使用不同角度的不同对象拍摄的模型进行比较不是一个好主意。即使在几何上完美匹配后也应该有很多小差异 - 如阴影、照明、颜色差异等。

我会在每次游戏开始时捕捉图像(参考)并提取特征(直线似乎足够好)然后在游戏结束后捕捉图像,减去参考,并进行斑点分析以找到飞镖.