OpenCV可以检测静止图像中的预定义图像标记吗

Can OpenCV detect predefined image markers in still images

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

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

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

是的。其中一种方法是使用特征匹配。在你的例子中,你在源图像中有预定义的标记,它必须与目标图像匹配,如图 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 的其他方法,例如计数、模板匹配等。