vs2015+opencv3.4.6 创建ChArUco板

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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章