C++处理YTB faces 标注信息

news/2025/4/1 3:24:19/

C++编写程序:
1.采用windows api;
2.创建结构体
struct Object {
    double o_x, o_y;  // 中心坐标
    double o_width, o_height;  // 长宽
};
3.创建上述结构体类型的数组;
4.读取.\Aaron_Eckhart文件夹下的txt文件,将文件中的字符按行处理:

        如:1.37.jpg,165,142,61,61
        每行的第一的逗号后到第二个逗号间的字符转成double传进o_x变量,
        第二个逗号到第三个逗号间的字符转成double传进o_y变量,
        第三个逗号到第四个逗号间的字符转成double传进o_width变量,
        第四个逗号后的字符转成double传进o_height变量

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <sstream>
#include <windows.h>struct Object {double o_x, o_y;       // 中心坐标double o_width, o_height;  // 长宽double name;
};std::vector<Object> ReadObjectsFromTxt(const std::wstring& filePath)
{std::wifstream inputFile(filePath);if (!inputFile){std::wcerr << L"Failed to open input file: " << filePath << std::endl;return {};}std::vector<Object> objects;std::wstring line;while (std::getline(inputFile, line)){Object obj;std::wstringstream ss(line);std::wstring token;// Parse the line using comma as the delimiterstd::getline(ss, token, L',');double name = std::stod(token.substr(token.find(L',') + 1));std::getline(ss, token, L',');obj.o_x = std::stod(token.substr(token.find(L',') + 1));std::getline(ss, token, L',');obj.o_y = std::stod(token.substr(token.find(L',') + 1));std::getline(ss, token, L',');obj.o_width = std::stod(token.substr(token.find(L',') + 1));std::getline(ss, token, L',');obj.o_height = std::stod(token.substr(token.find(L',') + 1));objects.push_back(obj);}inputFile.close();return objects;
}int main()
{std::wstring directory = L".\\Aaron_Eckhart";std::wstring searchPath = directory + L"\\*.txt";WIN32_FIND_DATAW fileData;HANDLE hFind = FindFirstFileW(searchPath.c_str(), &fileData);if (hFind != INVALID_HANDLE_VALUE){do{std::wstring filePath = directory + L"\\" + fileData.cFileName;std::vector<Object> objects = ReadObjectsFromTxt(filePath);// Process the objectsfor (const auto& obj : objects){// Do something with the object datastd::cout << "Object: x=" << obj.o_x << ", y=" << obj.o_y<< ", width=" << obj.o_width << ", height=" << obj.o_height << std::endl;}} while (FindNextFileW(hFind, &fileData) != 0);FindClose(hFind);}return 0;
}

其中, double name = std::stod(token.substr(token.find(L',') + 1));

是为了去掉第一个逗号前的字符,为了更方便读取坐标;


http://www.ppmy.cn/news/520652.html

相关文章

如何快速把mkv转为mp4格式,并保留字幕!

mkv文件其实属于封装格式&#xff0c;包括视频、音频、字幕等文件&#xff0c;像一些PR等剪辑软件就不能直接调用&#xff0c;而且很多播放器在识别这些文件时也可能因为兼容性问题导致不能播放。解决办法很简单&#xff0c;把mkv文件转为mp4格式就可以了。不过值得注意的是&am…

MS7024-数字编解码/TV编码器

1.基本介绍 MS7024是一款TV编码器芯片&#xff0c;用于手持式、便捷式视频应用&#xff0c;例如数码相机和类似的便携嵌入式系统。将视频信号编码并产生同步信号&#xff0c;符合NTSC和PAL标准。TV输出制式支持NTSC-M,NTSC-J,NTSC-433,PAL-B/D/G/H/I,PAL-M.PAL-N和PAL-60。具有…

mkv文件如何转为mp4?

mkv文件如何转为mp4?mkv格式并非是压缩格式的一种&#xff0c;而是Matroska的一种媒体文件&#xff0c;其最大的特点就是能容纳多种不同类型编码的视频、音频及字幕流。也因其格式的特殊性&#xff0c;使得很多软件不能打开mkv格式的视频。那为了不影响使用mkv视频&#xff0c…

mkv容器格式1---EBML语言

1. EBML(Extensible Binary Meta Language) 参考&#xff1a;http://blog.csdn.net/LBO4031/article/details/7591945 http://www.matroska.org/technical/specs/rfc/index.html mkv是建立在EBML语言基础上的&#xff0c;因此要了解mkv需要先了解EBML语言。 1. EBML元素(EBM…

MKVToolNix for Mac(mkv视频编辑工具)

MKVToolNix mac版是Macos上一款mkv视频编辑工具,支持将多种视频、音频、字幕等格式封装成mkv格式&#xff0c;MKVtoolnix mac版一款专业的MKV无损处理编辑工具&#xff0c;可以轻松实现MKV视频封装的功能。 MKVToolNix mac下载安装教程 下载完成后&#xff0c;双击.pkg文件打开…

H.264编码器基本原理

1.编码器 相关概念 编码器采用的是变换和预测的混合编码法&#xff1a;采用混合编码时候主要将图像分为固定大小的块&#xff0c;对块进行压缩编码处理。 1.混合编码&#xff1a;即将预测编码和变换编码结合起来。 1.1 预测编码&#xff1a; 1.1.1 帧内预测&#xff1a…

怎样把mkv文件转成mp4?

随着互联网的发展&#xff0c;视频文件已经更广泛的融入人们生活和工作的方方面面&#xff0c;甚至有很多小伙伴在视频剪辑行业开启了自己的行业之旅。但是大家在收集和下载视频的时候&#xff0c;就会发现各种格式的视频文件&#xff0c;其特点也是不一的&#xff0c;为了更好…

H.265编码原理入门

视频编码的目的是为了压缩原始视频&#xff0c;压缩的主要思路是从空间、时间、编码、视觉等几个主要角度去除冗余信息。由于 H.264 出色的数据压缩比率和视频质量&#xff0c;成为当前市场上最为流行的编解码标准。而 H.265 是在 H.264 的基础上&#xff0c;保证相同视频质量的…