配置VISP详细步骤:
Windows系统基于VS2019编译器编译获得VISP动态库

新接触到一个视觉库:Visual Servoing Platform
看情况这个库封装好了AprilTag识别部分
这是他们官网其中的一个例子
除了opencv和halcon又接触到一个视觉库,但是前面两个都还没搞清楚
VISP官网中AprilTag部分:
AprilTag

#include <visp3/detection/vpDetectorAprilTag.h>
#include <visp3/gui/vpDisplayGDI.h>
#include <visp3/gui/vpDisplayOpenCV.h>
#include <visp3/gui/vpDisplayX.h>
#ifdef VISP_HAVE_XML2
#include <visp3/core/vpXmlParserCamera.h>
#endif
#ifdef VISP_HAVE_V4L2
#include <visp3/sensor/vpV4l2Grabber.h>
#endif
#include <visp3/io/vpImageIo.h>
int main(int argc, const char **argv)
{#if defined(VISP_HAVE_APRILTAG) && (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV)) &&  \(defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_OPENCV))int opt_device = 0;vpDetectorAprilTag::vpAprilTagFamily tagFamily = vpDetectorAprilTag::TAG_36h11;vpDetectorAprilTag::vpPoseEstimationMethod poseEstimationMethod = vpDetectorAprilTag::HOMOGRAPHY_VIRTUAL_VS;double tagSize = 0.053;float quad_decimate = 1.0;int nThreads = 1;std::string intrinsic_file = "";std::string camera_name = "";bool display_tag = false;for (int i = 1; i < argc; i++) {if (std::string(argv[i]) == "--pose_method" && i + 1 < argc) {poseEstimationMethod = (vpDetectorAprilTag::vpPoseEstimationMethod)atoi(argv[i + 1]);} else if (std::string(argv[i]) == "--tag_size" && i + 1 < argc) {tagSize = atof(argv[i + 1]);} else if (std::string(argv[i]) == "--input" && i + 1 < argc) {opt_device = atoi(argv[i + 1]);} else if (std::string(argv[i]) == "--quad_decimate" && i + 1 < argc) {quad_decimate = (float)atof(argv[i + 1]);} else if (std::string(argv[i]) == "--nthreads" && i + 1 < argc) {nThreads = atoi(argv[i + 1]);} else if (std::string(argv[i]) == "--intrinsic" && i + 1 < argc) {intrinsic_file = std::string(argv[i + 1]);} else if (std::string(argv[i]) == "--camera_name" && i + 1 < argc) {camera_name = std::string(argv[i + 1]);} else if (std::string(argv[i]) == "--display_tag") {display_tag = true;} else if (std::string(argv[i]) == "--tag_family" && i + 1 < argc) {tagFamily = (vpDetectorAprilTag::vpAprilTagFamily)atoi(argv[i + 1]);} else if (std::string(argv[i]) == "--help" || std::string(argv[i]) == "-h") {std::cout << "Usage: " << argv[0]<< " [--input <camera input>] [--tag_size <tag_size in m>]"" [--quad_decimate <quad_decimate>] [--nthreads <nb>]"" [--intrinsic <intrinsic file>] [--camera_name <camera name>]"" [--pose_method <method> (0: HOMOGRAPHY_VIRTUAL_VS, 1: ""DEMENTHON_VIRTUAL_VS,"" 2: LAGRANGE_VIRTUAL_VS, 3: BEST_RESIDUAL_VIRTUAL_VS)]"" [--tag_family <family> (0: TAG_36h11, 1: TAG_36h10, 2: ""TAG_36ARTOOLKIT,"" 3: TAG_25h9, 4: TAG_25h7, 5: TAG_16h5)]"" [--display_tag] [--help]"<< std::endl;return EXIT_SUCCESS;}}vpCameraParameters cam;cam.initPersProjWithoutDistortion(615.1674805, 615.1675415, 312.1889954, 243.4373779);
#ifdef VISP_HAVE_XML2vpXmlParserCamera parser;if (!intrinsic_file.empty() && !camera_name.empty())parser.parse(cam, intrinsic_file, camera_name, vpCameraParameters::perspectiveProjWithoutDistortion);
#endifstd::cout << "cam:\n" << cam << std::endl;std::cout << "poseEstimationMethod: " << poseEstimationMethod << std::endl;std::cout << "tagFamily: " << tagFamily << std::endl;try {vpImage<unsigned char> I;
#if defined(VISP_HAVE_V4L2)vpV4l2Grabber g;std::ostringstream device;device << "/dev/video" << opt_device;g.setDevice(device.str());g.setScale(1);g.acquire(I);
#elif defined(VISP_HAVE_OPENCV)cv::VideoCapture cap(opt_device); // open the default cameraif (!cap.isOpened()) {            // check if we succeededstd::cout << "Failed to open the camera" << std::endl;return EXIT_FAILURE;}cv::Mat frame;cap >> frame; // get a new frame from cameravpImageConvert::convert(frame, I);
#endif
#ifdef VISP_HAVE_X11vpDisplayX d(I);
#elif defined(VISP_HAVE_GDI)vpDisplayGDI d(I);
#elif defined(VISP_HAVE_OPENCV)vpDisplayOpenCV d(I);
#endifvpDetectorBase *detector = new vpDetectorAprilTag(tagFamily);dynamic_cast<vpDetectorAprilTag *>(detector)->setAprilTagQuadDecimate(quad_decimate);dynamic_cast<vpDetectorAprilTag *>(detector)->setAprilTagPoseEstimationMethod(poseEstimationMethod);dynamic_cast<vpDetectorAprilTag *>(detector)->setAprilTagNbThreads(nThreads);dynamic_cast<vpDetectorAprilTag *>(detector)->setDisplayTag(display_tag);std::vector<double> time_vec;for (;;) {#if defined(VISP_HAVE_V4L2)g.acquire(I);
#elif defined(VISP_HAVE_OPENCV)cap >> frame; // get a new frame from cameravpImageConvert::convert(frame, I);
#endifvpDisplay::display(I);double t = vpTime::measureTimeMs();std::vector<vpHomogeneousMatrix> cMo_vec;dynamic_cast<vpDetectorAprilTag *>(detector)->detect(I, tagSize, cam, cMo_vec);t = vpTime::measureTimeMs() - t;time_vec.push_back(t);std::stringstream ss;ss << "Detection time: " << t << " ms for " << detector->getNbObjects() << " tags";vpDisplay::displayText(I, 40, 20, ss.str(), vpColor::red);for (size_t i = 0; i < cMo_vec.size(); i++) {vpDisplay::displayFrame(I, cMo_vec[i], cam, tagSize / 2, vpColor::none, 3);}vpDisplay::displayText(I, 20, 20, "Click to quit.", vpColor::red);vpDisplay::flush(I);if (vpDisplay::getClick(I, false))break;}std::cout << "Benchmark computation time" << std::endl;std::cout << "Mean / Median / Std: " << vpMath::getMean(time_vec) << " ms"<< " ; " << vpMath::getMedian(time_vec) << " ms"<< " ; " << vpMath::getStdev(time_vec) << " ms" << std::endl;delete detector;} catch (const vpException &e) {std::cerr << "Catch an exception: " << e.getMessage() << std::endl;}return EXIT_SUCCESS;
#else(void)argc;(void)argv;return 0;
#endif
}

ViSP视觉库中实现AprilTag的方法相关推荐

  1. Windows10系统下Visual Studio 2017 使用VISP视觉库中的AprilTags进行实时姿态识别

    Windows10系统下Visual Studio 2017 使用VISP视觉库中的AprilTags进行实时姿态识别 前言 环境配置 报错记录 相关C++代码介绍 代码参数说明 运行结果 运行速度 ...

  2. VISP视觉库框架详细解释

    接着上一篇VISP视觉库框架结构与使用入门_冯相文要加油呀!的博客-CSDN博客https://blog.csdn.net/weixin_51229250/article/details/121140 ...

  3. VISP视觉库框架结构与使用入门

    VISP安装配置步骤参考如下: ViSP安装之Windows系统基于VS2019编译器编译获得VISP动态库_冯相文要加油呀!的博客-CSDN博客https://blog.csdn.net/weixi ...

  4. timm 视觉库中的 create_model 函数详解

    timm 视觉库中的 create_model 函数详解 最近一年 Vision Transformer 及其相关改进的工作层出不穷,在他们开源的代码中,大部分都用到了这样一个库:timm.各位炼丹师 ...

  5. 【DSP库窗函数】ARM官方最新DSP库中窗函数的使用方法

    文章目录 Ⅰ.DSP库更新介绍及下载 Ⅱ.DSP库移植 Ⅲ.DSP库窗函数使用示例 Ⅰ.DSP库更新介绍及下载 ARM官方最近更新的DSP库版本V1.14.3中新加入了许多窗函数供用户使用,提高了对于 ...

  6. avatar.php uid,phpcms函数库中获取会员头像方法get_memberavatar()有时无效问题

    修复方法: 首先我先给出无效情况的演示代码,如下:$userid = intval($_GET['userid']); $userinfo = $this->db->get_one('us ...

  7. VISP视觉库识别AprilTag详细解读

    关于VISP其他前提内容见其他相关文章: AprilTag-VISP ***首先,想要用这个类,必须包含头文件:***#include <visp3/detection/vpDetectorAp ...

  8. java c pho_Java PHO库中的行为设置方法

    我使用库paho与mqtt-broker连接,发送消息,几乎一切正常,但setTimeToWait()方法有问题.它不计算我在setTimeToWait(2000)或setTimeToWait(10) ...

  9. Python:PIL库中getpixel()-方法的使用

    Python:PIL库中getpixel()方法的使用 getpixel()函数是用来获取图像中某一点的像素的RGB颜色值,getpixel的参数是一个像素点的坐标.对于图象的不同的模式,getpix ...

最新文章

  1. 学计算机出来的大佬,学计算机专业的大佬能否解答一下
  2. asp.net core上使用redis探索(1)
  3. JWT 和 JJWT,别再傻傻分不清了!
  4. boost::type_erasure::is_placeholder相关的测试程序
  5. 使用mvc模式读取服务器上的文件,关于C#:如何使用asp.net MVC应用程序从服务器上的网络路径读取...
  6. Linux DHCP Server 配置给FIT AP 使用的option
  7. Tomcat9.0部署iot.war(环境mysql8.0,centos7.2)
  8. 【IIS】修改注册表键值提升IIS的性能
  9. js跨域访问的超简单方法
  10. 【React】9、使用create-react-app(CRA)创建react项目
  11. 统计学(网易云可汗学院公开课笔记)
  12. 坚果云和微云哪个好?谈谈我的使用感受
  13. AlexNet网络结构详解与代码复现
  14. 关于uni-app入门看完这篇就够了
  15. linux+磁带机检查,Redhat Enterprise Linux磁带机简单操作方法
  16. GSM模块_常用AT指令详解
  17. 【OpenCV 学习笔记】—— 基于拉普拉斯金字塔的图像融合原理以及C++实现【或许是全网最通俗易懂的讲解】
  18. 第9章 maven的插件和生命周期
  19. 如何获取特定用户组内的无效账户?
  20. chrome 改变网页主题 设置黑色主题网页

热门文章

  1. Mysql---Centos7软件安装
  2. 2、cocos2d-js引擎的安装和新建
  3. Ubuntu系统(七)-安装FTP
  4. Apache Mina 介绍
  5. 断网与黑客无关 我来抖一抖暴风那点见不得人的猫腻
  6. 如何再造一个百度贴吧兼谈如何改造园子的团队
  7. Struts2工作原理详解
  8. 二叉树的遍历(包括递归和非递归方法)
  9. P1631 序列合并
  10. C#中接口和方法的运用(Fourteenth Day)