【opencv】示例-imagelist_reader.cpp 读取YAML格式文件中的图片列表,并逐个显示这些图片的灰度图...

9b23975f91864401ea8641a6d06b983e.png

这段代码的功能是使用OpenCV库读取一个YAML或XML格式文件中的图片列表,并且逐个地在窗口中以灰度图像的形式显示这些图片。用户可以按任意键来查看下一张图片。程序提供了帮助信息输出,指导用户如何使用该程序。此外,它使用命令行参数解析器来获取文件路径参数,并对参数进行相应的检查和处理。如果图片列表文件成功读取,程序会逐个显示图片列表中的每一张图片;否则,程序会终止并返回错误代码。

// 包含必要的OpenCV头文件
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>
#include <vector>// 使用OpenCV和标准命名空间中的名称
using namespace cv;
using namespace std;// 声明帮助函数,用于向用户展示如何使用该程序
static void help(char** av)
{// 向控制台打印使用该程序的指南cout << "\nThis program gets you started being able to read images from a list in a file\n""Usage:\n./" << av[0] << " image_list.yaml\n"<< "\tThis is a starter sample, to get you up and going in a copy pasta fashion.\n"<< "\tThe program reads in an list of images from a yaml or xml file and displays\n"<< "one at a time\n"<< "\tTry running imagelist_creator to generate a list of images.\n""Using OpenCV version %s\n" << CV_VERSION << "\n" << endl;
}// 函数从文件中读取图片列表并存储到一个字符串向量中
static bool readStringList(const string& filename, vector<string>& l)
{l.resize(0); // 清空字符串向量FileStorage fs(filename, FileStorage::READ); // 打开文件存储器以读取数据if (!fs.isOpened()) // 如果失败,则返回falsereturn false;FileNode n = fs.getFirstTopLevelNode(); // 获取文件中的第一个顶层节点if (n.type() != FileNode::SEQ) // 如果节点类型不是序列,则返回falsereturn false;FileNodeIterator it = n.begin(), it_end = n.end(); // 迭代器遍历节点for (; it != it_end; ++it) // 遍历所有的节点l.push_back((string)*it); // 将节点的值作为字符串添加到向量中return true; // 成功读取列表后返回true
}// 主处理函数,显示图片列表中的每一幅图片
static int process(const vector<string>& images)
{namedWindow("image", WINDOW_KEEPRATIO); // 创建一个窗体,窗体的大小可以调整for (size_t i = 0; i < images.size(); i++){Mat image = imread(images[i], IMREAD_GRAYSCALE); // 读取图片并转换为灰度图像imshow("image",image); // 在窗体中显示图片cout << "Press a key to see the next image in the list." << endl; // 提示用户按键以查看下一张图片waitKey(); // 等待用户按键}return 0; // 正常结束程序返回0
}// 程序入口点,主函数
int main(int ac, char** av)
{cv::CommandLineParser parser(ac, av, "{help h||}{@input||}"); // 用于解析命令行参数if (parser.has("help")) // 如果有"help"参数{help(av); // 显示帮助信息return 0; // 退出程序}std::string arg = parser.get<std::string>("@input"); // 获取输入参数,即图片列表文件的路径if (arg.empty()) // 如果参数为空{help(av); // 显示帮助信息return 1; // 退出程序,并返回错误代码1}vector<string> imagelist; // 定义字符串向量存储图片列表if (!readStringList(arg,imagelist)) // 读取图片列表,如果失败{cerr << "Failed to read image list\n" << endl; // 向错误输出流打印错误信息help(av); // 显示帮助信息return 1; // 退出程序,并返回错误代码1}return process(imagelist); // 调用process函数处理图片列表,然后退出程序
}

935cbbf0ec08ef68a16bcedcce2f7d05.png

57051605a08d55b5912db446b9919a68.png

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

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

相关文章

(文章复现)考虑网络动态重构的分布式电源选址定容优化方法

参考文献&#xff1a; [1]朱俊澎,顾伟,张韩旦,等.考虑网络动态重构的分布式电源选址定容优化方法[J].电力系统自动化,2018,42(05):111-119. 1.摘要 以投资周期经济收益最高为目标&#xff0c;基于二阶锥规划提出了一种考虑网络动态重构的分布式电源选址定容优化方法。首先&am…

毅四捕Go设计模式笔记——责任链模式

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09; 为了解决什么问题&#xff1f; 责任链模式的目的是为了将请求的发送者和接收者解耦。它允许多个处理器都有机会处理请求&#xff0c;将这些处理器连接成一条链&#xff0c;并沿着这条链传递请求&#xff…

Linux磁盘空间问题排查记录

问题 pip install时总提示OSError(28, ‘No space left on device’)或者ERROR: Could not install packages due to an OSError: [Errno 28] No space left on device 分析 很明显&#xff0c;磁盘空间不足。尝试了以下方法&#xff0c;没有解决问题&#xff1a; 清理pip缓…

给现有rabbitmq集群添加rabbitmq节点

现有的&#xff1a;10.2.59.216 rabbit-node1 10.2.59.217 rabbit-node2 新增 10.2.59.199 rabbit-node3 1、分别到官网下载erlang、rabbitmq安装包&#xff0c;我得版本跟现有集群保持一致。 erlang安装包&#xff1a;otp_src_22.0.tar.gz rabbitmq安装包&#xff1…

详解App Inventor 2 中的文件作用域(作用范围):App、程序包、缓存、兼容、私有、共享

本文内容来自中文网文档“文件管理器”组件部分&#xff0c;详细介绍了每一种文件作用域的特点及用法。 下面是每种作用域类型的简述&#xff1a; App [推荐] &#xff1a;Android 2.2及更高版本上文件将从应用程序特定存储中读取和写入&#xff0c;在 Android 早期版本上&…

STM32—DMA直接存储器访问详解

DMA——直接存储器访问 DMA&#xff1a;Data Memory Access, 直接存储器访问。 DMA和我们之前学过的串口、GPIO都是类似的&#xff0c;都是STM32中的一个外设。串口是用来发送通信数据的&#xff0c;而DMA则是用来把数据从一个地方搬到另一个地方&#xff0c;而且不占用CPU。…

Arthas排查工具

简介 | arthas (aliyun.com) 在线安装 #下载jar包 curl -O https://arthas.aliyun.com/arthas-boot.jar#启动会先检测虚拟机进程&#xff0c;如果没有启动失败(idea) java -jar arthas-boot.jar linux安装与window一样

flask毕业设计选题管理系统python+django_96r19

本系统选择编程语言。Pymysql是封装了MySQL驱动的Python驱动一个能使Python连接到MySQL的库。Python语言官方规范访问数据库的统一接口规范(Python DB-API)&#xff0c;防止在使用不同数据库时&#xff0c;由于底层数据库技术不同造成接口程序紊乱的问题。通过本次系统设计可以…

【Spring高级】Spring Boot启动过程

目录 SpringApplication new 分析源码分析步骤演示primarySources和Sources应用类型webApplicationTypesetInitializers设置容器初始化器setListeners设置监听器主类推断 SpringApplication run 分析主要步骤步骤演示事件发布容器相关执行 runner准备EnvironmentEnvironmentPos…

时间序列分析 #ARMA模型的识别与参数估计 #R语言

掌握ARMA模型的识别和参数估计。 原始数据在文末&#xff01;&#xff01;&#xff01; 练习1、 根据某1915-2004年澳大利亚每年与枪支有关的凶杀案死亡率&#xff08;每10万人&#xff09;数据&#xff08;题目1数据.txt&#xff09;&#xff0c;求&#xff1a; 第1小题&…

C# Solidworks二次开发:模型中实体Entity相关操作API详解

大家好&#xff0c;今天要讲的一些API是关于实体的相关API。 在开发的过程&#xff0c;很多地方会涉及到实体的相关操作&#xff0c;比如通过实体选中节点。下面就直接开始介绍API&#xff1a; &#xff08;1&#xff09;第一个API为Select4&#xff0c;这个API的含义为选中一…

微信小程序中调取小程序实现报错:提示 开发版小程序已过期,请在开发者工具中重新扫码的 解决方案

出现的问题&#xff1a; 解决方法&#xff1a; 将envVersion: develop,开发版切换为正式版 envVersion: release,wx.navigateToMiniProgram({appId:res.data.appId,path: res.data.prePayTn,extraData: {foo: bar,miniProgramOrgId:res.data.miniProgramOrgId,orderId: res.d…

css设置文字撑满盒子

效果如上&#xff1a; <div style"width: 250px;background-color:red;text-align-last:justify;word-break: keep-all;">为中国崛起而读书</div>

Python编写一个抽奖小程序,新手入门案例,简单易上手!

“ 本篇文章将以简明易懂的方式引导小白通过Python编写一个简单的抽奖小程序&#xff0c;无需太多的编程经验。通过本文&#xff0c;将学习如何使用Python内置的随机模块实现随机抽奖&#xff0c;以及如何利用列表等基本数据结构来管理和操作参与抽奖的人员名单。无论你是Pytho…

贪心算法:柠檬水找零

题目链接&#xff1a;860. 柠檬水找零 - 力扣&#xff08;LeetCode&#xff09; 收的钱只能是5、10、20美元&#xff0c;分类讨论&#xff1a;收5美元无需找零&#xff1b;收10美元找零5元&#xff1b;收20美元找零15美元。其中对于找零15美元的方案有两种&#xff0c;此处涉及…

设计模式-外观模式(Facade)

1. 概念 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它提供了一个统一的接口&#xff0c;用于访问子系统中的一群接口。外观模式的主要目的是隐藏系统的复杂性&#xff0c;通过定义一个高层级的接口&#xff0c;使得子系统更容易被使用。…

房屋鉴定研究院报告系统

一、项目背景与意义 随着城市化进程的加速和房地产市场的蓬勃发展&#xff0c;房屋安全问题日益受到社会各界的广泛关注。房屋鉴定作为确保房屋安全的重要手段&#xff0c;对于保障人民群众生命财产安全、维护社会稳定具有重要意义。然而&#xff0c;传统的房屋鉴定方式存在诸…

webpack-loader的使用

引入css后执行打包命令 "build": "npx webpack --config wk.config.js"发现报错&#xff1a; webpack默认只能处理js其他的像css,图片都需要借助loader来处理 css-loader loader可以用于对模块的源代码进行转换&#xff0c;可以把css看成一个模块&…

并发学习27--多线程 Tomcat 线程池

Tomcat连接器的线程池 socketProcessor也是个线程 Executor处理线程是按照JDK线程池方法处理&#xff0c;优先选用核心线程&#xff0c;再用救急线程&#xff0c;再去阻塞队列&#xff0c;最后采用拒绝策略。 Tomcat线程池与ThreadExecutorPool的区别 Tomcat中的配置 Tomcat …

kafka快速入门+应用

Kafka, 构建TB级异步消息系统 1.快速入门 1.1 阻塞队列 在生产线程 和 消费线程 之间起到了 &#xff0c; 缓冲作用&#xff0c;即避免CPU 资源被浪费掉 BlockingQueue 解决 线程通信 的问题阻塞方法 put 、 take生产者、消费者 模式 生产者&#xff1a;产生数据的线程…