OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
ArUco 标记和板检测,用于稳健的相机位姿估计

详细描述

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

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

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

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

另请参见
[100] 此代码最初由 Sergio Garrido-Jurado 作为 2015 年 Google Summer of Code (GSoC 15) 项目开发。

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

枚举

枚举  cv::aruco::CornerRefineMethod {
  cv::aruco::CORNER_REFINE_NONE ,
  cv::aruco::CORNER_REFINE_SUBPIX ,
  cv::aruco::CORNER_REFINE_CONTOUR ,
  cv::aruco::CORNER_REFINE_APRILTAG
}
 
枚举  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 中定义的预定义字典之一。
 

枚举类型文档

◆ 角点优化方法

#include <opencv2/objdetect/aruco_detector.hpp>

枚举器
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 方法的标记和角点检测 [294]

◆ 预定义字典类型

#include <opencv2/objdetect/aruco_dictionary.hpp>

预定义标记字典/集合。

每个字典指示所包含的比特数和标记数

  • DICT_ARUCO_ORIGINAL:标准 ArUco 库标记。1024 个标记,5x5 比特,最小距离 0
枚举器
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 个代码

函数文档

◆ 绘制检测到的ChArUco角点()

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

#include <opencv2/objdetect/charuco_detector.hpp>

绘制一组 Charuco 角点。

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

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

◆ 绘制检测到的菱形()

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

#include <opencv2/objdetect/charuco_detector.hpp>

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

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

给定一个检测到的菱形数组,此函数将它们绘制到图像中。如果提供了标记边框和标记标识符,则会绘制它们。对调试很有用。

◆ 绘制检测到的标记()

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

#include <opencv2/objdetect/aruco_detector.hpp>

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

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

给定一个检测到的标记角点及其对应的 ID 数组,此函数将这些标记绘制到图像中。如果提供了标记边框和标记标识符,则会绘制它们。对调试很有用。

◆ 扩展字典()

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在开头包含此字典中的标记(可选)
randomSeedtheRNG() 的用户提供的种子

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

◆ 生成图像标记()

void cv::aruco::generateImageMarker ( const Dictionary & 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>

生成规范标记图像。

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

此函数以其标准形式(即,可打印)返回标记图像。

◆ 获取预定义字典() [1/2]

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

#include <opencv2/objdetect/aruco_dictionary.hpp>

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

◆ 获取预定义字典() [2/2]

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

#include <opencv2/objdetect/aruco_dictionary.hpp>

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