aruco模块提供了 cv:aruco::CharucoBoard
类代表一个Charuco板和继承的 板
类。
该类,以及ChArUco余下的功能,在charuco.hpp中定义:
#include < opencv2 / aruco / charuco.hpp >
定义一个 CharucoBoard
,以下参数必要的:
- 在X方向上棋盘方格的数量。
- 棋盘方格的数量在Y方向上。
- 广场边的长度。
- 标记的长度。
- 字典的标记。
- id的所有标记
类似于 GridBoard
对象 ,aruco模块提供了一个函数来创建CharucoBoard
。 这个函数是静态函数:
cv::aruco::CharucoBoard::create()
:
cv::aruco::CharucoBoard board = cv::aruco::CharucoBoard::create(5, 7, 0.04, 0.02, dictionary);
- 第一和第二参数是方块的数量分别在X和Y方向。
- 第三个和第四个参数分别方块和标记的长度。 他们可以在任何单位提供,记住,估计姿势将会以相同的单位进行测量(通常是使用米)。
- 最后,提供标记的字典。
像 GridBoard:create(),
每一个标记的id分配默认按升序,从0开始。
一旦我们有 CharucoBoard
对象,我们可以创建一个图像打印它。
cv::Ptr<cv::aruco::CharucoBoard> board = cv::aruco::CharucoBoard::create(5, 7, 0.04, 0.02, dictionary);
cv::Mat boardImage;
board->draw( cv::Size(600, 500), boardImage, 10, 1 );
- 第一个参数是输出图像的像素大小。 在这种情况下600 x500像素。 如果这不与板规模成正比,它将以图像为中心。
boardImage
:输出图像。- 第三个参数(可选)边缘的像素,所以所有的标记都触碰图像边界。 在这种情况下,保证是10。
- 最后,标记边界的大小,类似
drawMarker()
函数。 默认值是1。
测试示例:
#include <opencv2/opencv.hpp>
//#include <opencv2/aruco.hpp>
#include <opencv2/aruco/charuco.hpp>
#include <vector>
#include <iostream>
using namespace std;
using namespace cv;
void createCharucoBoard(cv::Mat &boardImage)
{
cv::Ptr<cv::aruco::Dictionary> dictionary = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_6X6_250);
cv::Ptr<cv::aruco::CharucoBoard> board = cv::aruco::CharucoBoard::create(5, 7, 0.04, 0.02, dictionary);
board->draw(cv::Size(600, 500), boardImage, 10, 1);
}
int main()
{
cv::Mat charuco_boardImage;
createCharucoBoard(charuco_boardImage);
return 0;
}