用opencv的aruco库生成二维码marker标记
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了用opencv的aruco库生成二维码marker标记,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3254字,纯文字阅读大概需要5分钟。
内容图文
![用opencv的aruco库生成二维码marker标记](/upload/InfoBanner/zyjiaocheng/1032/67c886ac73094dc69e0252d8acfb975d.jpg)
用opencv的aruco库生成二维码marker标记
代码来源于官方提供的完整的工作实例create_marker.cpp。在opencv源码中的位置为opencv_contrib-4.4.0/modules/aruco/samples/create_marker.cpp。
#include <opencv2/highgui.hpp>
#include <opencv2/aruco.hpp>
#include <iostream>
using namespace cv;
namespace {
const char* about = "Create an ArUco marker image";
const char* keys =
"{@outfile |<none> | Output image }"
"{d | | dictionary: DICT_4X4_50=0, DICT_4X4_100=1, DICT_4X4_250=2,"
"DICT_4X4_1000=3, DICT_5X5_50=4, DICT_5X5_100=5, DICT_5X5_250=6, DICT_5X5_1000=7, "
"DICT_6X6_50=8, DICT_6X6_100=9, DICT_6X6_250=10, DICT_6X6_1000=11, DICT_7X7_50=12,"
"DICT_7X7_100=13, DICT_7X7_250=14, DICT_7X7_1000=15, DICT_ARUCO_ORIGINAL = 16}"
"{id | | Marker id in the dictionary }"
"{ms | 200 | Marker size in pixels }"
"{bb | 1 | Number of bits in marker borders }"
"{si | false | show generated image }";
}
int main(int argc, char *argv[]) {
CommandLineParser parser(argc, argv, keys); // 命令行参数解析类
parser.about(about);
if(argc < 4) {
parser.printMessage();
return 0;
}
int dictionaryId = parser.get<int>("d"); // 预定义的字典id
int markerId = parser.get<int>("id"); // 字典里的marker id
int borderBits = parser.get<int>("bb"); // marker黑色边界的大小
int markerSize = parser.get<int>("ms"); // 输出marker图像的大小
bool showImage = parser.get<bool>("si"); // 是否展示图像
String out = parser.get<String>(0);
if(!parser.check()) {
parser.printErrors();
return 0;
}
Ptr<aruco::Dictionary> dictionary =
aruco::getPredefinedDictionary(aruco::PREDEFINED_DICTIONARY_NAME(dictionaryId));
Mat markerImg;
aruco::drawMarker(dictionary, markerId, markerSize, markerImg, borderBits);
imwrite(out, markerImg);
if(showImage) {
imshow("marker", markerImg);
waitKey(0);
}
return 0;
}
当命令行输入的参数数目不够时,会给如下提示,帮助用户正确输入参数。
Create an ArUco marker image
Usage: aruco_create_marker [params] outfile
--bb (value:1)
Number of bits in marker borders
-d
dictionary: DICT_4X4_50=0, DICT_4X4_100=1, DICT_4X4_250=2,DICT_4X4_1000=3, DICT_5X5_50=4, DICT_5X5_100=5, DICT_5X5_250=6, DICT_5X5_1000=7, DICT_6X6_50=8, DICT_6X6_100=9, DICT_6X6_250=10, DICT_6X6_1000=11, DICT_7X7_50=12,DICT_7X7_100=13, DICT_7X7_250=14, DICT_7X7_1000=15, DICT_ARUCO_ORIGINAL = 16
--id
Marker id in the dictionary
--ms (value:200)
Marker size in pixels
--si (value:false)
show generated image
outfile (value:<none>)
Output image
正确的参数输入实例如下。
生成DICT_4X4_50字典中第一个marker,并保存在outfile指定的路径下。同时,在程序运行时,显示marker图像,按任意键后图像关闭,程序结束。
./aruco_create_marker -d=0 -id=0 -si=true -@outfile=/home/liangbeibei/m.jpg
生成的marker图片如下。
较为简单的生成marker图像的代码如下。
#include <opencv2/opencv.hpp>
#include <opencv2/aruco.hpp>
#include <opencv2/calib3d/calib3d.hpp>
#include "opencv2/core/core.hpp"
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
cv::Mat markerImage;
// 指定字典
cv::Ptr<cv::aruco::Dictionary> dictionary = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_6X6_250);
cv::aruco::drawMarker(dictionary, 7, 200, markerImage, 1);
imwrite("/home/liangbeibei/aruco_tag.jpg",markerImage);
imshow("test", markerImage);
waitKey();
return 0;
}
内容总结
以上是互联网集市为您收集整理的用opencv的aruco库生成二维码marker标记全部内容,希望文章能够帮你解决用opencv的aruco库生成二维码marker标记所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。