OpenCV 4.13.0
开源计算机视觉库 (Open Source Computer Vision)
正在加载...
正在搜索...
未找到匹配项
用于稳健相机姿态估计的 ArUco 标记和板检测

详细说明

ArUco 标记检测 正方形的基准标记(也称为增强现实标记)对于简单、快速和稳健的相机姿态估计非常有用。

ArucoDetector 类的主要功能是检测图像中的标记。如果标记被分组为板,那么你可以尝试使用 ArucoDetector::refineDetectedMarkers() 来恢复缺失的标记。ArUco 标记也可以用于高级的棋盘角点查找。为此,将标记分组到 CharucoBoard 中,并使用 CharucoDetector::detectBoard() 查找棋盘的角点。

该实现基于 R. Muñoz-Salinas 和 S. Garrido-Jurado 的 ArUco 库 [101]

标记也可以基于 AprilTag 2 [297] 基准检测方法进行检测。

另请参阅
[101] 此代码最初由 Sergio Garrido-Jurado 在 Google Summer of Code 2015 (GSoC 15) 项目中开发。

类  cv::aruco::ArucoDetector
 ArucoDetector 类主要功能是使用 detectMarkers() 方法检测图像中的标记。 更多...
 
类  cv::aruco::Board
 ArUco 标记的标记板更多...
 
类  cv::aruco::CharucoBoard
 ChArUco 棋盘是一个平面棋盘,标记放置在棋盘的白色方块内。 更多...
 
类  cv::aruco::CharucoDetector
 
结构体  cv::aruco::CharucoParameters
 
结构体  cv::aruco::DetectorParameters
 struct DetectorParametersArucoDetector 使用 更多...
 
类  cv::aruco::Dictionary
 Dictionary 是一组大小相同的唯一 ArUco 标记。 更多...
 
类  cv::aruco::GridBoard
 具有标记网格排列的平面板。 更多...
 
结构体  cv::aruco::RefineParameters
 struct RefineParametersArucoDetector 使用 更多...
 

枚举

enum  cv::aruco::CornerRefineMethod {
  cv::aruco::CORNER_REFINE_NONE ,
  cv::aruco::CORNER_REFINE_SUBPIX ,
  cv::aruco::CORNER_REFINE_CONTOUR ,
  cv::aruco::CORNER_REFINE_APRILTAG
}
 
enum  cv::aruco::PredefinedDictionaryType {
  cv::aruco::DICT_4X4_50 = 0 ,
  cv::aruco::DICT_4X4_100 ,
  cv::aruco::DICT_4X4_250 ,
  cv::aruco::DICT_4X4_1000 ,
  cv::aruco::DICT_5X5_50 ,
  cv::aruco::DICT_5X5_100 ,
  cv::aruco::DICT_5X5_250 ,
  cv::aruco::DICT_5X5_1000 ,
  cv::aruco::DICT_6X6_50 ,
  cv::aruco::DICT_6X6_100 ,
  cv::aruco::DICT_6X6_250 ,
  cv::aruco::DICT_6X6_1000 ,
  cv::aruco::DICT_7X7_50 ,
  cv::aruco::DICT_7X7_100 ,
  cv::aruco::DICT_7X7_250 ,
  cv::aruco::DICT_7X7_1000 ,
  cv::aruco::DICT_ARUCO_ORIGINAL ,
  cv::aruco::DICT_APRILTAG_16h5 ,
  cv::aruco::DICT_APRILTAG_25h9 ,
  cv::aruco::DICT_APRILTAG_36h10 ,
  cv::aruco::DICT_APRILTAG_36h11 ,
  cv::aruco::DICT_ARUCO_MIP_36h12
}
 预定义的标记字典/集合。 更多...
 

函数

void cv::aruco::drawDetectedCornersCharuco (InputOutputArray image, InputArray charucoCorners, InputArray charucoIds=noArray(), Scalar cornerColor=Scalar(255, 0, 0))
 绘制一组 Charuco 角点。
 
void cv::aruco::drawDetectedDiamonds (InputOutputArray image, InputArrayOfArrays diamondCorners, InputArray diamondIds=noArray(), Scalar borderColor=Scalar(0, 0, 255))
 绘制一组检测到的 ChArUco Diamond 标记。
 
void cv::aruco::drawDetectedMarkers (InputOutputArray image, InputArrayOfArrays corners, InputArray ids=noArray(), Scalar borderColor=Scalar(0, 255, 0))
 在图像中绘制检测到的标记。
 
Dictionary cv::aruco::extendDictionary (int nMarkers, int markerSize, const Dictionary &baseDictionary=Dictionary(), int randomSeed=0)
 通过新的 nMarkers 扩展基本字典。
 
void cv::aruco::generateImageMarker (const Dictionary &dictionary, int id, int sidePixels, OutputArray img, int borderBits=1)
 生成规范标记图像。
 
Dictionary cv::aruco::getPredefinedDictionary (int dict)
 返回由 DICT_* 引用的预定义字典之一。
 
Dictionary cv::aruco::getPredefinedDictionary (PredefinedDictionaryType name)
 返回 PredefinedDictionaryType 中定义的预定义字典之一。
 

枚举类型文档 (Enumeration Type Documentation)

◆ CornerRefineMethod

#include <opencv2/objdetect/aruco_detector.hpp>

枚举值 (Enumerator)
CORNER_REFINE_NONE 
Python: cv.aruco.CORNER_REFINE_NONE

基于 ArUco 方法的标记和角点检测。

CORNER_REFINE_SUBPIX 
Python: cv.aruco.CORNER_REFINE_SUBPIX

ArUco 方法并使用角点亚像素精度完善角点位置。

CORNER_REFINE_CONTOUR 
Python: cv.aruco.CORNER_REFINE_CONTOUR

ArUco 方法并使用轮廓点线拟合完善角点位置。

CORNER_REFINE_APRILTAG 
Python: cv.aruco.CORNER_REFINE_APRILTAG

基于 AprilTag 2 方法的标记和角点检测 [297]

◆ PredefinedDictionaryType

#include <opencv2/objdetect/aruco_dictionary.hpp>

预定义的标记字典/集合。

每个字典指示所包含的位数和标记数量。

  • DICT_ARUCO_ORIGINAL:标准 ArUco 库标记。1024 个标记,5x5 位,0 最小距离
枚举值 (Enumerator)
DICT_4X4_50 
Python: cv.aruco.DICT_4X4_50

4x4 位,任意两个代码之间的最小汉明距离 = 4,50 个代码

DICT_4X4_100 
Python: cv.aruco.DICT_4X4_100

4x4 位,任意两个代码之间的最小汉明距离 = 3,100 个代码

DICT_4X4_250 
Python: cv.aruco.DICT_4X4_250

4x4 位,任意两个代码之间的最小汉明距离 = 3,250 个代码

DICT_4X4_1000 
Python: cv.aruco.DICT_4X4_1000

4x4 位,任意两个代码之间的最小汉明距离 = 2,1000 个代码

DICT_5X5_50 
Python: cv.aruco.DICT_5X5_50

5x5 位,任意两个代码之间的最小汉明距离 = 8,50 个代码

DICT_5X5_100 
Python: cv.aruco.DICT_5X5_100

5x5 位,任意两个代码之间的最小汉明距离 = 7,100 个代码

DICT_5X5_250 
Python: cv.aruco.DICT_5X5_250

5x5 位,任意两个代码之间的最小汉明距离 = 6,250 个代码

DICT_5X5_1000 
Python: cv.aruco.DICT_5X5_1000

5x5 位,任意两个代码之间的最小汉明距离 = 5,1000 个代码

DICT_6X6_50 
Python: cv.aruco.DICT_6X6_50

6x6 位,任意两个代码之间的最小汉明距离 = 13,50 个代码

DICT_6X6_100 
Python: cv.aruco.DICT_6X6_100

6x6 位,任意两个代码之间的最小汉明距离 = 12,100 个代码

DICT_6X6_250 
Python: cv.aruco.DICT_6X6_250

6x6 位,任意两个代码之间的最小汉明距离 = 11,250 个代码

DICT_6X6_1000 
Python: cv.aruco.DICT_6X6_1000

6x6 位,任意两个代码之间的最小汉明距离 = 9,1000 个代码

DICT_7X7_50 
Python: cv.aruco.DICT_7X7_50

7x7 位,任意两个代码之间的最小汉明距离 = 19,50 个代码

DICT_7X7_100 
Python: cv.aruco.DICT_7X7_100

7x7 位,任意两个代码之间的最小汉明距离 = 18,100 个代码

DICT_7X7_250 
Python: cv.aruco.DICT_7X7_250

7x7 位,任意两个代码之间的最小汉明距离 = 17,250 个代码

DICT_7X7_1000 
Python: cv.aruco.DICT_7X7_1000

7x7 位,任意两个代码之间的最小汉明距离 = 14,1000 个代码

DICT_ARUCO_ORIGINAL 
Python: cv.aruco.DICT_ARUCO_ORIGINAL

6x6 位,任意两个代码之间的最小汉明距离 = 3,1024 个代码

DICT_APRILTAG_16h5 
Python: cv.aruco.DICT_APRILTAG_16h5

4x4 位,任意两个代码之间的最小汉明距离 = 5,30 个代码

DICT_APRILTAG_25h9 
Python: cv.aruco.DICT_APRILTAG_25h9

5x5 位,任意两个代码之间的最小汉明距离 = 9,35 个代码

DICT_APRILTAG_36h10 
Python: cv.aruco.DICT_APRILTAG_36h10

6x6 位,任意两个代码之间的最小汉明距离 = 10,2320 个代码

DICT_APRILTAG_36h11 
Python: cv.aruco.DICT_APRILTAG_36h11

6x6 位,任意两个代码之间的最小汉明距离 = 11,587 个代码

DICT_ARUCO_MIP_36h12 
Python: cv.aruco.DICT_ARUCO_MIP_36h12

6x6 位,任意两个代码之间的最小汉明距离 = 12,250 个代码

函数文档 (Function Documentation)

◆ drawDetectedCornersCharuco()

void cv::aruco::drawDetectedCornersCharuco ( InputOutputArray 图像,
InputArray charucoCorners,
InputArray charucoIds = noArray(),
Scalar cornerColor = Scalar(255, 0, 0) )
Python
cv.aruco.drawDetectedCornersCharuco(image, charucoCorners[, charucoIds[, cornerColor]]) -> 图像

#include <opencv2/objdetect/charuco_detector.hpp>

绘制一组 Charuco 角点。

参数
图像输入/输出图像。它必须有 1 个或 3 个通道。通道数量不变。
charucoCorners检测到的 charuco 角点向量
charucoIdscharucoCorners 中每个角点的标识符列表
cornerColor环绕每个角点的正方形颜色

此函数绘制一组检测到的 Charuco 角点。如果提供了标识符向量,它还会绘制每个角点的 id。

◆ drawDetectedDiamonds()

void cv::aruco::drawDetectedDiamonds ( InputOutputArray 图像,
InputArrayOfArrays diamondCorners,
InputArray diamondIds = noArray(),
Scalar borderColor = Scalar(0, 0, 255) )
Python
cv.aruco.drawDetectedDiamonds(image, diamondCorners[, diamondIds[, borderColor]]) -> 图像

#include <opencv2/objdetect/charuco_detector.hpp>

绘制一组检测到的 ChArUco Diamond 标记。

参数
图像输入/输出图像。它必须有 1 个或 3 个通道。通道数量不变。
diamondCorners菱形角点的位置,格式与 detectCharucoDiamond() 返回的相同。(例如 std::vector<std::vector<cv::Point2f> >)。对于 N 个检测到的标记,此数组的维度应为 Nx4。角点的顺序应为顺时针。
diamondIdsdiamondCorners 中菱形标识符的向量,格式与 detectCharucoDiamond() 返回的相同(例如 std::vector<Vec4i>)。可选,如果未提供,则不绘制 id。
borderColor标记边框的颜色。其余颜色(文本颜色和第一个角点颜色)根据此颜色计算以提高可视化效果。

给定一个检测到的菱形数组,此函数在图像中绘制它们。绘制标记边框,如果提供了标记标识符,则也绘制。用于调试目的。

◆ drawDetectedMarkers()

void cv::aruco::drawDetectedMarkers ( InputOutputArray 图像,
InputArrayOfArrays corners,
InputArray ids = noArray(),
Scalar borderColor = Scalar(0, 255, 0) )
Python
cv.aruco.drawDetectedMarkers(image, corners[, ids[, borderColor]]) -> 图像

#include <opencv2/objdetect/aruco_detector.hpp>

在图像中绘制检测到的标记。

参数
图像输入/输出图像。它必须有 1 个或 3 个通道。通道数量不变。
corners输入图像上的标记角点位置。(例如 std::vector<std::vector<cv::Point2f> >)。对于 N 个检测到的标记,此数组的维度应为 Nx4。角点的顺序应为顺时针。
idsmarkersCorners 中标记标识符的向量。可选,如果未提供,则不绘制 id。
borderColor标记边框的颜色。其余颜色(文本颜色和第一个角点颜色)根据此颜色计算以提高可视化效果。

给定一个检测到的标记角点及其相应 id 的数组,此函数在图像中绘制标记。绘制标记边框,如果提供了标记标识符,则也绘制。用于调试目的。

◆ extendDictionary()

Dictionary cv::aruco::extendDictionary ( int nMarkers,
int markerSize,
const Dictionary & baseDictionary = Dictionary(),
int randomSeed = 0 )
Python
cv.aruco.extendDictionary(nMarkers, markerSize[, baseDictionary[, randomSeed]]) -> retval

#include <opencv2/objdetect/aruco_dictionary.hpp>

通过新的 nMarkers 扩展基本字典。

参数
nMarkers字典中的标记数量
markerSize每个标记每维的位数
baseDictionary在开头包含此字典中的标记(可选)
randomSeed用户提供的 theRNG() 种子

此函数创建一个新字典,其中包含 nMarkers 个标记,每个标记由 markerSize x markerSize 位组成。如果提供了 baseDictionary,则其标记直接包含在内,其余标记在此基础上生成。如果 baseDictionary 的大小大于 nMarkers,则只取 baseDictionary 中的前 nMarkers 个标记,不添加新标记。

◆ generateImageMarker()

void cv::aruco::generateImageMarker ( const Dictionary & 字典,
int id,
int sidePixels,
OutputArray img,
int borderBits = 1 )
Python
cv.aruco.generateImageMarker(dictionary, id, sidePixels[, img[, borderBits]]) -> img

#include <opencv2/objdetect/aruco_detector.hpp>

生成规范标记图像。

参数
字典指示标记类型的标记字典
id将返回的标记标识符。它必须是指定字典中的有效 id。
sidePixels图像的像素大小
img带有标记的输出图像
borderBits标记边框的宽度。

此函数以规范形式返回标记图像(即准备打印)

◆ getPredefinedDictionary() [1/2]

Dictionary cv::aruco::getPredefinedDictionary ( int dict)
Python
cv.aruco.getPredefinedDictionary(dict) -> retval

#include <opencv2/objdetect/aruco_dictionary.hpp>

返回由 DICT_* 引用的预定义字典之一。

◆ getPredefinedDictionary() [2/2]

Dictionary cv::aruco::getPredefinedDictionary ( PredefinedDictionaryType name)
Python
cv.aruco.getPredefinedDictionary(dict) -> retval

#include <opencv2/objdetect/aruco_dictionary.hpp>

返回 PredefinedDictionaryType 中定义的预定义字典之一。