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

标签 opencv augmented-reality

我是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)

这可以作为其他方法(例如countours,模板匹配等)的起点和结帐opencv docs,这些方法可以用于基于标记的AR。

关于opencv - OpenCV可以检测静止图像中的预定义图像标记吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62275011/

相关文章:

c++ - opencv::Mat,从原始数据中获取像素值?

android - 使用 Vision API 自定义 RectangleDetector

iphone - 通过(常见)网络摄像头/iPhone/Android 增强现实 - 网格检测? - 哈利波特 3D 示例

c# - 如何在 C# 中定义全息坐标系?

c++ - OpenCV C++ 中的透明像素(使用 GrabCut 时)

python - 如何使用 Python OpenCV cv2.PCAProject 压缩单个数组

opencv - 如何在摄影中检测被摄体区域

android - 如何相互显示两个表面?

iphone - OpenCV IOS实时模板匹配

swift - 为 ARKit(不是 QLPreview)加载 USDZ Material 属性