【问题标题】:Can OpenCV detect predefined image markers in still imagesOpenCV可以检测静止图像中的预定义图像标记吗
【发布时间】:2020-06-09 04:23:29
【问题描述】:

我对 opencv 世界完全陌生,我想问一个概念性问题...

是否可以以与增强现实框架检测和跟踪视频源中的标记图像类似的方式检测静态照片中的“标记”?

如果单个图像包含已知标记(来自唯一标记的数据库),我是否可以提取该标记的大小、位置和方向(假设标记图像具有足够的可检测特征等)?

【问题讨论】:

  • 取决于标记的外观和图像质量。您不应该从使用您想到的任何标记捕获/记录图像开始。相反,您应该确保能够检测到这些标记,或重新设计它们。有一些通用标记,如 ARUCO 标记或 QR 码,但在假设错误之前,您仍应使用您的设置(尺寸、与相机的距离、照度等)对其进行测试。
  • 看这里,它使用图像来跟踪所有使用 OpenCV github.com/artoolkitx/artoolkitx/tree/master/Source/ARX/OCVT

标签: opencv augmented-reality


【解决方案1】:

是的。其中一种方法是使用特征匹配。在您的情况下,您在源图像中有预定义的标记,它必须与目标图像匹配,如here 所示。一个变化是我们不需要在源图像中找到关键点。 假设您有一组标记 (x1, y1), (x2, y2) .. ,您可以像这样计算 sift 或 orb 描述符。

key_points_src = [cv2.KeyPoint(x1, y1, 1), cv2.KeyPoint(x2, y2, 1) ...]
key_points_src, src_des = orb.compute(src_img, key_points_src)

现在要将它们与目标图像匹配,一种方法是: 在目标图像中找到关键点并计算描述符

key_points_target, target_des = orb.detectAndCompute(target_img, None)

现在匹配它们

bf = cv.BFMatcher(cv.NORM_HAMMING, crossCheck=True)
matches = bf.match(src_des,target_des)

这可以作为一个起点并检查 opencv docs 以了解可用于基于标记的 AR 的其他方法,例如计数、模板匹配等。

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 2012-07-14
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    相关资源
    最近更新 更多