【opencv】示例-imagelist_creator.cpp 从命令行参数中创建一个图像文件列表(yaml格式)...

cpp 复制代码
/* 这个程序可以创建一个命令行参数列表的yaml或xml文件列表 */
// 包含必要的OpenCV头文件
#include "opencv2/core.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <string>
#include <iostream>


// 使用标准库中的特定标识符
using std::string;
using std::cout;
using std::endl;


// 使用OpenCV命名空间中的内容
using namespace cv;


// 帮助函数,用于展示如何使用这个程序
static void help(char** av)
{
  cout << "\nThis creates a yaml or xml list of files from the command line args\n"
      "usage:\n./" << av[0] << " imagelist.yaml *.png\n"
      << "Try using different extensions.(e.g. yaml yml xml xml.gz etc...)\n"
      << "This will serialize this list of images or whatever with opencv's FileStorage framework" << endl;
}


// main函数,程序的入口点
int main(int ac, char** av)
{
  cv::CommandLineParser parser(ac, av, "{help h||}{@output||}"); // 解析命令行参数
  if (parser.has("help")) // 如果有help参数
  {
    help(av); // 显示帮助信息
    return 0; // 退出程序
  }
  string outputname = parser.get<string>("@output"); // 获取输出文件的名称


  if (outputname.empty()) // 如果输出文件名是空的
  {
    help(av); // 显示帮助信息
    return 1; // 退出程序,并返回错误代码1
  }


  Mat m = imread(outputname); // 尝试读取输出文件名指定的图像,检查是否是一个图像文件以避免覆盖!
  if(!m.empty()){ // 如果成功读取到了图像
    std::cerr << "fail! Please specify an output file, don't want to overwrite your images!" << endl;
    help(av); // 显示帮助信息
    return 1; // 退出程序,并返回错误代码1
  }


  FileStorage fs(outputname, FileStorage::WRITE); // 创建FileStorage对象,用于将文件写入outputname
  fs << "images" << "["; // 开始写入图片列表
  for(int i = 2; i < ac; i++){ // 遍历所有命令行参数,排除了程序名和输出文件名
    fs << string(av[i]); // 将图像文件路径写入文件
  }
  fs << "]"; // 结束列表
  return 0; // 成功退出程序
}

该程序的功能是从命令行参数中创建一个图像文件列表,并将该列表序列化为yaml或xml格式的文件。该程序首先会检查用户是否指定帮助参数,如果指定了,则显示帮助信息并退出。然后程序会尝试解析命令行参数中指定的输出文件名,如果用户没有指定输出文件或输出文件已经存在并且不是为空的图像文件(避免覆盖现有图像文件),程序将显示错误信息并退出。如果输出文件名有效,程序将创建一个FileStorage对象,并循环遍历除命令行参数名和输出文件名以外的其他所有参数,将它们以列表的形式序列化到指定的yaml或xml文件中。

go 复制代码
./test.exe imagelist.yaml pic1.png pic2.png pic3.png pic4.png
相关推荐
三产2 分钟前
Hermes 教程 02:配置详解
人工智能·hermes
2601_957780845 分钟前
Claude Code 2026年最新部署指南:从环境搭建到技能扩展
前端·人工智能·ai编程·claude
dhashdoia9 分钟前
2026年GPT-5.5国内无障碍使用指南:星链4SAPI全链路部署
人工智能·gpt·ai作画·ai编程
zhangfeng113322 分钟前
workbuddy 专家 “前端开发师” 结合nvidia-mistral-small-4-119b-2603 项目计划-前端界面开发.md
前端·人工智能·免费
向量引擎23 分钟前
向量引擎、deepseek v4、GPT Image 2、api key:Agent 热潮下,AI 应用真正卷的是“调度能力
人工智能·gpt·aigc·ai编程·ai写作·agi·api调用
2601_9577808424 分钟前
GPT API工程化接入:从演示验证到生产部署的完整实践
大数据·人工智能·gpt·架构
王者鳜錸1 小时前
企业解决方案十二-网站、各类APP、人工智能定制开发
人工智能·app定制·网站定制·大模型定制·知识库定制
AI算力小知识1 小时前
国内 GPU 算力租赁平台深度测评:涵盖显卡资源、价格、性能、服务多维度
人工智能·gpu算力·ai算力
团象科技1 小时前
2026出海技术观察:云API接口迭代的能力边界与业务增量空间
大数据·人工智能
沪漂阿龙1 小时前
面试题:神经网络的优化怎么讲?梯度消失、Adam、BN、Dropout、权重初始化一文讲透
人工智能·深度学习·神经网络