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