IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Aruco opencv使用过程中的问题记录及解决方案 -> 正文阅读

[人工智能]Aruco opencv使用过程中的问题记录及解决方案

Aruco opencv使用过程中的问题记录及解决方案

编译环境:

windows10

vs2103+win32 debug

opencv3.1.0+opencv_contrib-3.1.0

1. aruco board 生成显示标记板的对象指针问题

问题描述:

aruco::GridBoard::create()这个返回值的类型是GridBoard,导致draw()前指针引用无法正常使用

在网上可以找到的两种示例写法,一种是使用auto声明变量、一种是直接生成指针类型对象,这应该是往期版本的contrib里,aruco 生成标记板的函数的返回值就是board的指针类型,这一点在看https://www.cnblogs.com/qsm2020/p/14139183.html源码分析的时候也可以得到印证。

//auto写法
auto dictionary = aruco::getPredefinedDictionary(DICT_6X6_250);
	auto board = aruco::GridBoard::create(5, 7, 0.04, 0.01, dictionary);
Mat boardImg;
	board->draw(Size(600, 800), boardImg, 10, 1);
	imshow("boardImg", boardImg);
//声明生成指针写法
cv::Ptr<cv::aruco::GridBoard> board = cv::aruco::GridBoard::create(5, 7, 0.04, 0.01, dictionary);
cv::Mat boardImage;
board->draw( cv::Size(600, 500), boardImage, 10, 1 );

但是我使用的3.1.0这个版本,它的函数已经更新,现在的返回值已经是gridboard类型了,具体源码的函数定义如下,所以以上两种写法都不可行;

    /**
     * @brief Create a GridBoard object
     *
     * @param markersX number of markers in X direction
     * @param markersY number of markers in Y direction
     * @param markerLength marker side length (normally in meters)
     * @param markerSeparation separation between two markers (same unit than markerLenght)
     * @param dictionary dictionary of markers indicating the type of markers.
     * The first markersX*markersY markers in the dictionary are used.
     * @return the output GridBoard object
     *
     * This functions creates a GridBoard object given the number of markers in each direction and
     * the marker size and marker separation.
     */
    static GridBoard create(int markersX, int markersY, float markerLength, float markerSeparation,
                            Dictionary dictionary);

解决方案:

  • 成员函数可以直接使用!

    cv::aruco::GridBoard board = cv::aruco::GridBoard::create(5, 7, 0.04, 0.01, dictionary);
    cv::Mat boardImage;
    board.draw( cv::Size(600, 500), boardImage, 10, 1 );
    
  • 使用opencv的指针类型为其创建指针索引(可以,但没必要)

    cv::aruco::GridBoard board = cv::aruco::GridBoard::create(5, 7, 0.04, 0.01, dictionary);
    cv::Ptr<cv::aruco::GridBoard> pboard = cv::makePtr<cv::aruco::GridBoard>(board);
    cv::Mat boardImage;
    pboard->draw( cv::Size(600, 500), boardImage, 10, 1 );
    
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-07-31 16:38:15  更:2021-07-31 16:38:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 21:17:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码