vs2015+opencv3.4.6创建ArUco标记

aruco功能包括在:#include

标记和词典:

ArUco标记是由宽黑色边框和内部二进制矩阵组成的合成方形标记,其确定其标识符(id)。 黑色边界便于其在图像中的快速检测,并且二进制编码允许其识别和错误检测和校正技术的应用。 标记大小决定了内部矩阵的大小。 例如,标记大小为4×4由16位组成。

ArUco标记的一些例子:

vs2015+opencv3.4.6创建ArUco标记_第1张图片

        图1 标记图像的示例

必须注意的是,可以发现标记在环境中旋转,然而,检​​测过程需要能够确定其原始旋转,从而明确地识别每个角落。 这也是基于二进制编码完成的。

标记词典是在特定应用程序中考虑的一组标记。 它只是其每个标记的二进制编码列表。

字典的主要属性是字典大小和标记大小。

  • 字典大小是组成字典的标记的数量。
  • 标记大小是这些标记的大小(位数)。

aruco模块包括一些预定义的词典,涵盖一系列不同的词典大小和标记大小。

可以认为标记id是通过将二进制编码转换为十进制基数而获得的数字。 然而,这是不可能的,因为对于高标记尺寸,位数太高并且管理如此大量的数字是不实际的。 相反,标记id只是它所属的字典中的标记索引。 例如,字典中的前5个标记具有id:0,1,2,3和4。

标记创建:

在检测之前,需要打印标记以便放置在环境中。 可以使用drawMarker()函数生成标记图像。

例如,让我们分析以下调用:

cv::Mat markerImage;

cv::Ptr dictionary = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_6X6_250);

cv::aruco::drawMarker(dictionary, 23, 200, markerImage, 1);

首先,通过选择aruco模块中的一个预定义词典来创建Dictionary对象。 具体地说,该字典由250个标记和6×6位的标记大小( DICT_6X6_250 )组成。

drawMarker的参数是:

  • 第一个参数是先前创建的Dictionary对象。
  • 第二个参数是标记id,在这种情况下是字典DICT_6X6_250的标记23。 请注意,每个字典由不同数量的标记组成。 在这种情况下,有效ID从0到249.任何超出有效范围的特定id都将产生异常。
  • 第三个参数200是输出标记图像的大小。 在这种情况下,输出图像的大小为200x200像素。 请注意,此参数应足够大,以存储特定字典的位数。 因此,例如,对于6x6位的标记大小,您无法生成5x5像素的图像(并且不考虑标记边界)。 此外,为避免变形,此参数应与位数+边界大小成比例,或至少远高于标记大小(如示例中的200),因此变形无关紧要。
  • 第四个参数是输出图像。
  • 最后,最后一个参数是一个可选参数,用于指定标记黑色边框的宽度。 大小与位数成比例。 例如,值为2表示边框的宽度等于两个内部位的大小。 默认值为1。

测试示例:

#include 
#include 
#include 
#include 

using namespace std;
using namespace cv;

void createArucoMarker(cv::Mat &markerImage)
{
	cv::Ptr dictionary = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_6X6_250);
	cv::aruco::drawMarker(dictionary, 23, 200, markerImage, 1);
}


int main()
{
	cv::Mat markerImage;
	createArucoMarker(markerImage);

	return 0;
}

vs2015+opencv3.4.6创建ArUco标记_第2张图片

 

你可能感兴趣的:(立体视觉)