本周我遇到了一个非常热门的话题——增强现实,但我们需要先看看ARUCO标记是什么……
ArUco 标记 .. 它们是什么?
ArUco 标记类似于二维码,区别在于二维码存储的信息比 ArUco 标记多得多,因此很难用于我们将要做的事情。
它是一个由黑色边框组成的二进制矩阵,它是一种合成标记,用于在图像或视频中立即定位。
这就是 ArUco Marker 的样子:
现在,因为它是二进制的并且包含某种信息,我们需要有一些变化,所以这些标记有两个独特的属性——ID 和类型
现在标记的 id 取决于它是什么类型,让我们了解一下这是一些细节:在上面的标记中,你会看到,四周都被填充了,在标记中你可以看到一个行(去除填充后)可以容纳 6 个白框,所以这是一个 6X6 标记。
现在你无法猜测标记的类型。类型是预定义的,在这里有点小问题,cv2 中共有 25 种类型(或字典)的标记,每个字典包含相同数量的位或块和固定数量的标记(50,100,250 或 1000)。
上面附加的标记图像是 DICT_6X6_250 的 id 23。
所以,这里的类型是 DICT_6X6_250,id 是 23。(注意这里的 id 不能超过 250,因为字典中只有 250 个可用的标记)。
工业用途
用于姿势估计、机器人自动化、2D 投影、增强现实等等!
当然,今天我们将学习如何使用它们进行距离计算。
在使用它们之前让我们看看它们是如何生成的:
在 Python 中,你可以在 cv2.aruco.drawMarker() 函数的帮助下生成它们,让我们看看它的实际效果!
所需的包是:
import cv2
import numpy as np
import argparse
import sys
import os
现在,你需要标记的是 id 和类型,因此让我们将它们作为参数
ap.add_argument("-i", "--id", type=int, required=True,
help="id of the aruco marker to be generated")
ap.add_argument("-t", "--type", type=str,
default="DICT_ARUCO_ORIGINAL", help="type of ARUCO marker")
现在,为了生成这些标记,我们创建了一个ArUco字典。
ARUCO_DICT = {
"DICT_4X4_50": cv2.aruco.DICT_4X4_50,
"DICT_4X4_100": cv2.aruco.DICT_4X4_100,
"DICT_4X4_250": cv2.aruco.DICT_4X4_250,
"DICT_4X4_1000": cv2.aruco.DICT_4X4_1000,
"DICT_5X5_50": cv2.aruco.DICT_5X5_50,
"DICT_5X5_100": cv2.aruco.DICT_5X5_100,
"DICT_5X5_250": cv2.aruco.DICT_5X5_250,
"DICT_5X5_1000": cv2.aruco.DICT_5X5_1000,
"DICT_6X6_50": cv2.aruco.DICT_6X6_50,
"DICT_6X6_100": cv2.aruco.DICT_6X6_100,
"DICT_6X6_250": cv2.aruco.DICT_6X6_250,
"DICT_6X6_1000": cv2.aruco.DICT_6X6_1000,
"DICT_7X7_50": cv2.aruco.DICT_7X7_50,
"DICT_7X7_100": cv2.aruco.DICT_7X7_100,
"DICT_7X7_250": cv2.aruco.DICT_7X7_250,
"DICT_7