opencv - 如何在OpenCV中变换图像以匹配圆形模型

标签 opencv computer-vision

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

enter image description here

但是,这仅在输入图像基本相同的情况下有效。在另一种情况下,电路板的 Angular 略有不同,因此我想也许可以将图像转换为与模型图像匹配的颜色,然后执行上面可以看到的过程。

enter image description here

所以我的问题是:如何使用OpenCV转换最后一张图像以匹配形状和 Dart 板的外观?

最佳答案

Dart 板基本上是平面的。因此,您可以通过单应性对所需的变换进行建模。现在,您可以像here一样执行简单的特征提取和匹配,或者如果速度不那么重要,则可以使用基于强度的参数对齐algorithm(更准确)。

但是,正如评论中已经提到的,事后不会那么简单。 Dart 飞行(视变形而定)很可能会覆盖木板上与实际分数不一致的区域。实际上,即使正面看也很难说。

我认为您将必须找到将 Dart 粘在板上的位置。此外,我认为从某个 Angular 来看,这样做会更容易。也许,您可以在预先检测到差异的区域中拟合线段。

关于opencv - 如何在OpenCV中变换图像以匹配圆形模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40917453/

相关文章:

computer-vision - Yolo 或 Faster RCNN 中的 anchor 框或边界框

c# - 从C++调用uv *作为cv::Mat到WPF应用程序BitmapSource?

image - 检测纸质目标的圆圈和射击

android - OpenCV,Java:特定区域中的颜色检测

java - 如何删除此异常 "Exception in thread "main"java.lang.UnsatisfiedLinkError : no jniopencv_objdetect in java. library.path"

python - 在谷歌colab中导入自定义库时出现问题

c++ - 离散曲线进化算法

python-3.x - 如何在当前纪元期间加载/获取下一个纪元的下一批数据?

c# - opencv识别功能在C#中无法正常工作

opencv - 如何使用OpenCV停止随机林中的随机采样?