ardupilot开发 --- 机载(边缘)计算机-VISP-附录 篇

我要这铁棒有何用

  • 1. 源码附录
    • 1.1 tutorial-grabber-opencv-hyl.cpp

1. 源码附录

1.1 tutorial-grabber-opencv-hyl.cpp

/*! \example tutorial-grabber-opencv.cpp */
#include <stdlib.h>
#include <visp3/core/vpImageConvert.h>
#include <visp3/gui/vpDisplayOpenCV.h>
#include <visp3/io/vpImageStorageWorker.h>#if defined(HAVE_OPENCV_VIDEOIO)
#include <opencv2/videoio.hpp>
#endif#define USE_COLOR // Comment to acquire gray level imagesvoid usage(const char *argv[], int error)
{std::cout << "SYNOPSIS" << std::endl<< "  " << argv[0] << " [--device <index>]"<< " [--seqname <sequence name>]"<< " [--record <mode>]"<< " [--no-display]"<< " [--help] [-h]" << std::endl<< std::endl;std::cout << "DESCRIPTION" << std::endl<< "  --device <index> " << std::endl<< "    Camera device index. Set 0 to dial with the first camera," << std::endl<< "    and 1 to dial with the second camera attached to the computer." << std::endl<< "    Default: 0 to consider /dev/video0 device." << std::endl<< std::endl<< "  --seqname <sequence name>" << std::endl<< "    Name of the sequence of image to create (ie: /tmp/image%04d.jpg)." << std::endl<< "    Default: empty." << std::endl<< std::endl<< "  --record <mode>" << std::endl<< "    Allowed values for mode are:" << std::endl<< "      0: record all the captures images (continuous mode)," << std::endl<< "      1: record only images selected by a user click (single shot mode)." << std::endl<< "    Default mode: 0" << std::endl<< std::endl<< "  --no-display" << std::endl<< "    Disable displaying captured images." << std::endl<< "    When used and sequence name specified, record mode is internally set to 1 (continuous mode)."<< std::endl<< std::endl<< "  --help, -h" << std::endl<< "    Print this helper message." << std::endl<< std::endl;std::cout << "USAGE" << std::endl<< "  Example to visualize images:" << std::endl<< "    " << argv[0] << std::endl<< std::endl<< "  Example to visualize images from a second camera:" << std::endl<< "    " << argv[0] << " --device 1" << std::endl<< std::endl<< "  Examples to record a sequence:" << std::endl<< "    " << argv[0] << " --seqname I%04d.png" << std::endl<< "    " << argv[0] << " --seqname folder/I%04d.png --record 0" << std::endl<< std::endl<< "  Examples to record single shot images:\n"<< "    " << argv[0] << " --seqname I%04d.png --record 1\n"<< "    " << argv[0] << " --seqname folder/I%04d.png --record 1" << std::endl<< std::endl;if (error) {std::cout << "Error" << std::endl<< "  "<< "Unsupported parameter " << argv[error] << std::endl;}
}// usage: binary -h
// device name: 0 is the default to dial with the first camera,
// 1 to dial with a second camera attached to the computer
int main(int argc, const char *argv[])
{int opt_device = 0;std::string opt_seqname;std::string opt_filename;int opt_record_mode = 0;bool opt_display = true;for (int i = 1; i < argc; i++) {if (std::string(argv[i]) == "--device") {opt_device = std::atoi(argv[i + 1]);i++;}else if (std::string(argv[i]) == "--seqname") {opt_seqname = std::string(argv[i + 1]);i++;}else if (std::string(argv[i]) == "--record") {opt_record_mode = std::atoi(argv[i + 1]);i++;}else if (std::string(argv[i]) == "--no-display") {opt_display = false;}else if (std::string(argv[i]) == "--help" || std::string(argv[i]) == "-h") {usage(argv, 0);return EXIT_SUCCESS;}else if (std::string(argv[i]) == "--filename") {opt_filename = std::string(argv[i + 1]);i++;}else {usage(argv, i);return EXIT_FAILURE;}}if ((!opt_display) && (!opt_seqname.empty())) {opt_record_mode = 0;}std::cout << "Use device : " << opt_device << std::endl;std::cout << "Recording  : " << (opt_seqname.empty() ? "disabled" : "enabled") << std::endl;std::cout << "Display    : " << (opt_display ? "enabled" : "disabled") << std::endl;std::cout << "Filename   : " << (opt_filename.empty() ? "Filename is null" : opt_filename) << std::endl;std::string text_record_mode =std::string("Record mode: ") + (opt_record_mode ? std::string("single") : std::string("continuous"));if (!opt_seqname.empty()) {std::cout << text_record_mode << std::endl;std::cout << "Record name: " << opt_seqname << std::endl;}#if defined(HAVE_OPENCV_VIDEOIO) && defined(HAVE_OPENCV_HIGHGUI) && defined(VISP_HAVE_THREADS)try {cv::VideoCapture cap(opt_filename,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;int i = 0;while ((i++ < 20) && !cap.read(frame)) {}; // warm up camera by skiping unread framesstd::cout << "Image size : " << frame.rows << " " << frame.cols << std::endl;#ifdef USE_COLORvpImage<vpRGBa> I; // To acquire color images
#elsevpImage<unsigned char> I; // To acquire gray images
#endifvpImageConvert::convert(frame, I);vpDisplayOpenCV *d = nullptr;if (opt_display) {d = new vpDisplayOpenCV(I);}#ifdef USE_COLORvpImageQueue<vpRGBa> image_queue(opt_seqname, opt_record_mode);vpImageStorageWorker<vpRGBa> image_storage_worker(std::ref(image_queue));std::thread image_storage_thread(&vpImageStorageWorker<vpRGBa>::run, &image_storage_worker);
#elsevpImageQueue<unsigned char> image_queue(opt_seqname, opt_record_mode);vpImageStorageWorker<unsigned char> image_storage_worker(std::ref(image_queue));std::thread image_storage_thread(&vpImageStorageWorker<unsigned char>::run, &image_storage_worker);
#endifbool quit = false;while (!quit) {double t = vpTime::measureTimeMs();cap >> frame; // get a new frame from camera// Convert the image in ViSP format and display itvpImageConvert::convert(frame, I);vpDisplay::display(I);quit = image_queue.record(I);std::stringstream ss;ss << "Acquisition time: " << std::setprecision(3) << vpTime::measureTimeMs() - t << " ms ";vpDisplay::displayText(I, I.getHeight() - 20, 10, ss.str(), vpColor::red);vpDisplay::flush(I);}image_queue.cancel();image_storage_thread.join();if (d) {delete d;}}catch (const vpException &e) {std::cout << "Catch an exception: " << e << std::endl;}
#else(void)argc;(void)argv;
#if !defined(HAVE_OPENCV_VIDEOIO)std::cout << "Install OpenCV videoio module, configure and build ViSP again to use this example" << std::endl;
#endif
#if (VISP_CXX_STANDARD < VISP_CXX_STANDARD_11)std::cout << "This tutorial should be built with c++11 support" << std::endl;
#endif
#endif
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/774108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL的安装(Linux版)

1.所需要的文件 MySQL.zip 2. 卸载自带的Mysql-libs # 查看是否存在 rpm -qa | grep mariadb# 如果存在则执行命令进行卸载 rpm -e --nodeps mariadb-libs3.在/opt目录下创建MySQL目录并上传所需要的安装包 cd /optmkdir MySQL4.按照编号顺序安装&#xff08;压缩包在解压完…

springboot多模块

一、demo 1、创建父项目 首先使用 Spring Initializr 来快速创建好一个Maven工程。然后删除无关的文件&#xff0c;只需保留pom.xml 文件。 &#xff08;1&#xff09;new Project -> spring initializr快速构建SpringBoot&#xff0c;artifactId为springbootmodules&…

nginx 正向代理 https

问题背景 因为网络环境受限&#xff0c;应用服务器无法直接访问外网&#xff0c;需要前置机上中转一下&#xff0c;这种情况可在应用服务器修改/etc/hosts文件指向前置机&#xff0c;在前置机上的nginx设置四层代理&#xff0c;从而出站。 方案 根据How to Use NGINX as an …

手把手教你 - JMeter压力测试

前言 压力测试是每一个Web应用程序上线之前都需要做的一个测试&#xff0c;他可以帮助我们发现系统中的瓶颈问题&#xff0c;减少发布到生产环境后出问题的几率&#xff1b;预估系统的承载能力&#xff0c;使我们能根据其做出一些应对措施。所以压力测试是一个非常重要的步骤&…

文案转化率低?快看看这两个坑你踩没踩

对于很多中小企业来说&#xff0c;无论是来拓市场还是获客&#xff0c;软文营销都会成为他们的主要营销方式&#xff0c;比较软文营销的成本较低&#xff0c;同时门槛也不高。但是也有品牌发现&#xff0c;自己和团队辛苦构思了几周写出的文案&#xff0c;但是效果不是很好。今…

数学分析复习:一元函数的极限

文章目录 函数极限定义和性质函数极限的另一种定义Cauchy收敛准则 本篇文章适合个人复习翻阅&#xff0c;不建议新手入门使用 函数极限 定义和性质 定义&#xff1a;函数极限 设函数 f ( x ) f(x) f(x) 若 ∀ ε > 0 , ∃ δ > 0 , ∀ x ∈ O o ( x 0 , δ ) , s . t …

QT5.14.2 码上热浪,用Qt5狂暴轰入多媒体狂潮

在这个视觉化、移动化的时代&#xff0c;多媒体应用无疑成为了现代计算机程序的香饽饽。无论是摄像头录像、视频播放器&#xff0c;还是音频可视化、GIF动画浏览&#xff0c;都让用户体验达到了前所未有的层次。而要想在这片热土上百战百胜&#xff0c;我们的祭旗就是Qt5这一跨…

了解微信小程序开发流程

前言&#xff1a;本文只适合初学者了解大致开发流程&#xff0c;好让后续学习胸有成竹&#xff0c;有条不紊 1、开发准备 ① 在微信公众平台 (qq.com)完成微信小程序账号注册 ②下载安装微信小程序开发者工具 2、创建项目 新建 新建时需要的appid&#xff0c;在微信公众平…

Python学习:函数

函数定义 在Python中&#xff0c;函数&#xff08;Function&#xff09;是一组用于完成特定任务或计算的语句块。定义函数可以让我们将一段代码重用多次&#xff0c;提高代码的可读性和可维护性。以下是定义函数的基本语法和结构&#xff1a; def function_name(parameters):&…

运动规划_碰撞检测算法之分离轴定理

运动规划:碰撞检测算法之分离轴定理 附赠自动驾驶全套学习资料和量产经验&#xff1a;链接 如上文所述&#xff0c;基于包围形的方法是一种粗略的碰撞检测方法&#xff0c;基于外接圆形的方法运算速度很快&#xff0c;但精度很差&#xff1b;基于轴对齐包围矩形&#xff08;AA…

0.96寸OLED屏调试 ----(二)

所需设备&#xff1a; 1、USB 转 SPI I2C 适配器&#xff1b;内附链接 2、0.96寸OLED显示模块&#xff1b; 备注&#xff1a;专业版、升级版都适用&#xff1b; 读写控制 SSD1306通过 D/C# 和 R/W# 两位来确定&#xff1a;读/写数据&#xff0c;写命令和读状态四种通信行为。…

从凑零钱问题理解动态规划

给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数量是无限的。 示例…

【论文笔记】RobotGPT: Robot Manipulation Learning From ChatGPT

【论文笔记】RobotGPT: Robot Manipulation Learning From ChatGPT 文章目录 【论文笔记】RobotGPT: Robot Manipulation Learning From ChatGPTAbstractI. INTRODUCTIONII. RELATED WORK1. LLMs for Robotics2. Robot Learning III. METHODOLOGY1. ChatGPT Prompts for Robot …

【MySQL】9. 内置函数

函数 1. 日期函数 获得年月日&#xff1a; mysql> select current_date(); ---------------- | current_date() | ---------------- | 2024-03-23 | ---------------- 1 row in set (0.00 sec)获得时分秒&#xff1a; mysql> select current_time(); ------------…

vue3+Pinia的使用 - 封装

目录&#xff1a; persist.ts 可存储到本地 import { PersistedStateOptions } from "pinia-plugin-persistedstate";/*** description pinia 持久化参数配置* param {String} key 存储到持久化的 name* param {Array} paths 需要持久化的 state name* return per…

测试缺陷定位的基本方法

前后端bug特征 后端&#xff1a; 业务逻辑问题&#xff1a;如任务状态未扭转成功&#xff0c;创建任务失败等数据类问题&#xff1a;如新增的任务在页面没有展示出来等性能类问题&#xff1a;提交任务一直显示创建中、批量操作等待耗时长超时等 前端&#xff1a; 页面显示类…

基于人类反馈的强化学习:最核心的5个步骤

基于人类反馈的强化学习&#xff08; Reinforcement Learning with Human Feedback&#xff09;工作原理 强化学习正在彻底改变技术和商业世界中复杂问题的处理方式。这是一种强大的工具。通过该工具&#xff0c;机器能够从环境中学习并根据奖惩做出明智的决策。 但是&#x…

约克中央空调YES-will系列,舒适冷暖与高品质家居的优选

漫漫寒冬,室内一片寒意,开启空调多久才能享受到暖意?如果冬季气温较低,空调能否保持正常的制热运行? 炎炎夏季,即便在室内也同样是“暴汗”不断,身上黏糊糊,什么样的家用中央空调才能快速制冷,让全家人感受到舒适,同时又能避免传统空调直吹带来的一系列问题? 遇上梅雨季节…

面试题 之 webpack

1.说说你对webpack理解&#xff1f;解决什么问题&#xff1f; Webpack 是实现前端项目的模块化&#xff0c;用于现代 JavaScript 应用程序的静态模块打包工具&#xff0c;被webpack 直接引用的资源打包进 bunde.js的资源&#xff0c;当webpack 处理应用程序时,它会在内部构建一…

SpringBoot-注解:@Async 使用

不同类中使用Async 线程配置初始化类-ThreadPoolConfig package com.zzdy.recharge.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableA…