【OpenCV/aruco】创建board Demo
- 说在前面
操作系统:win10
vs 版本:2017
opencv版本:4.0.1
opencv-contrb版本:4.0.1
- Board
board是一个aruco marker的棋盘,上面布置了许多marker。
board可用于校准(Calibrate)摄像机
- 运行截图
- 说明
- 代码
#include <opencv2\highgui.hpp>
#include <opencv2\aruco.hpp>
#include <opencv2\aruco\dictionary.hpp>
#include <opencv2\aruco\charuco.hpp>
#include <opencv2\core.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\opencv.hpp>
#include <vector>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
int markersX = 5;//X轴上标记的数量
int markersY = 5;//Y轴上标记的数量 本例生成5x5的棋盘
int markerLength = 100;//标记的长度,单位是像素
int markerSeparation = 20;//每个标记之间的间隔,单位像素
int dictionaryId = cv::aruco::DICT_4X4_50;//生成标记的字典ID
int margins = markerSeparation;//标记与边界之间的间隔
int borderBits = 1;//标记的边界所占的bit位数
bool showImage = true;
Size imageSize;
imageSize.width = markersX * (markerLength + markerSeparation) - markerSeparation + 2 * margins;
imageSize.height =
markersY * (markerLength + markerSeparation) - markerSeparation + 2 * margins;
Ptr<aruco::Dictionary> dictionary =
aruco::getPredefinedDictionary(aruco::PREDEFINED_DICTIONARY_NAME(dictionaryId));
Ptr<aruco::GridBoard> board = aruco::GridBoard::create(markersX, markersY, float(markerLength),
float(markerSeparation), dictionary);
// show created board
Mat boardImage;
board->draw(imageSize, boardImage, margins, borderBits);
if (showImage) {
imshow("board", boardImage);
waitKey(0);
}
return 0;
}