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

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