临桂建设局网站,免费素材图片库,四川建设网报名系统,新浪网页版入口目标
您将找到以下问题的答案#xff1a;
如何使用YAML或XML文件打印和读取文件和OpenCV的文本条目#xff1f;如何对 OpenCV 数据结构做同样的事情#xff1f;如何为您的数据结构执行此操作#xff1f;使用 OpenCV 数据结构#xff0c;例如 cv#xff1a;#xff1a;…目标
您将找到以下问题的答案
如何使用YAML或XML文件打印和读取文件和OpenCV的文本条目如何对 OpenCV 数据结构做同样的事情如何为您的数据结构执行此操作使用 OpenCV 数据结构例如 cvFileStorage cvFileNode 或 cvFileNodeIterator 。
源代码 C蟒
您可以从此处下载它也可以在 OpenCV 源代码库中找到它。samples/cpp/tutorial_code/core/file_input_output/file_input_output.cpp
下面是一个示例代码说明如何实现目标列表中列举的所有内容。
#include opencv2/core.hpp
#include iostream
#include 字符串
使用命名空间 CV;
使用命名空间 std;
静态无效帮助char** av
{
cout endl av[0] “显示了 OpenCV 序列化功能的用法。 endl
“用法” endl av[0] “ outputfile.yml.gz” endl
“输出文件可以是 XML xml 或 YAML yml/yaml。您甚至可以通过”
“在其扩展名中指定这一点如 xml.gz yaml.gz 等…” endl
“使用 FileStorage您可以使用 和 运算符序列化 OpenCV 中的对象” endl
“例如 - 创建一个类并对其进行序列化” endl
“——用它来读取和写入矩阵。 endl;
}
类 我的数据
{
公众
MyData A0 X0 id
{}
明确MyDataint A97 XCV_PI id“mydata1234” // 显式以避免隐式转换
{}
void writeFileStorage fs const //写这个类的序列化
{
fs “{” “A” A “X” X “id” id “}”;
}
void readconst FileNode node //读取此类的序列化
{
A int节点[“A”];
X doublenode[“X”];
id 字符串node[“id”];
}
public // 数据成员
int一个;
双X;
字符串 ID;
};
必须定义这些写入和读取函数FileStorage 中的序列化才能正常工作
static void writeFileStorage fs const stdstring const MyData x
{
x.写入fs;
}
static void readconst FileNode node MyData x const MyData default_value MyData{
if节点。空())
x default_value;
还
x.read节点;
}
此函数会将我们的自定义类打印到控制台
静态 ostream 运算符ostream out const MyData m
{
out “{ id ” m.id “ ”;
out “X ” m.X “ ”;
输出 “A ” m.A “}”;
返回;
}
int mainint ac char** av
{
如果 ac 2
{
帮助AV;
返回 1;
}
字符串文件名 av[1];
{ 写
席R Mat_eye3 3
T Mat_zeros3 1;
我的数据 m1;
FileStorage fs文件名FileStorageWRITE);
或
文件存储 fs;
fs.open文件名 FileStorageWRITE;
fs “iterationNr” 100;
fs “strings” “[”;文本 - 字符串序列
fs “image1.jpg” “Awesomeness” “…/data/baboon.jpg”;
fs “]”;关闭序列 // 关闭序列
fs “映射”;文本 - 映射
fs “{” “一” 1;
fs “二” 2 “}”;
fs “R” R;cvMat
fs “T” T;
fs “MyData” m;你自己的数据结构
司 司长。release;// 显式关闭
cout “写完成。” endl;
}
{读
cout endl “Reading ” endl;
文件存储 fs;
司 司长。openfilename FileStorageREAD);
int itNr;
fs[“迭代Nr”] itNr;
itNr int fs[“迭代Nr”];
cout itNr;
如果 fs.is已打开())
{
cerr “无法打开”文件名 endl;
帮助AV;
返回 1;
}
FileNode n fs[“字符串”];读取字符串序列 - Get 节点
if n.type FileNodeSEQ)
{
Cerr “字符串不是一个序列FAIL“结束;
返回 1;
}
FileNodeIterator it n.begin it_end n.end;遍历节点
对于 ;它 it_end;it
cout 字符串*it endl;
n fs[“映射”];从序列中读取映射
cout “两个 ” intn[“两个”]) ; ;
cout “一 ” intn[“One”] endl endl;
我的数据 m;
席RT;
fs[“R”] R;读取 cvMat
fs[“T”] T;
fs[“MyData”] 米;阅读你自己的structure_
cout endl
“R ” R endl;
cout “T ” T endl endl;
cout “MyData ” endl m endl endl;
显示非现有节点的默认行为
cout “尝试读取 NonExisting应使用其默认值初始化数据结构”。;
fs[“不存在”] 米;
cout endl “NonExisting ” endl m endl;
}
cout endl
“提示使用文本编辑器打开”文件名以查看序列化数据。” endl;
返回 0;
}
解释
在这里我们只讨论 XML 和 YAML 文件输入。您的输出及其各自的输入文件可能只有这些扩展名之一并且结构来自此。它们是您可以序列化的两种数据结构映射如 STL 映射和 Python 字典和元素序列如 STL 向量。它们之间的区别在于在地图中每个元素都有一个唯一的名称您可以通过访问它。对于序列您需要遍历它们以查询特定项目。 **XML/YAML 文件打开和关闭。**在将任何内容写入此类文件之前您需要打开它并在最后关闭它。OpenCV中的XML/YAML数据结构是 cvFileStorage 。要指定此结构绑定到硬盘驱动器上的文件您可以使用其构造函数或 open 函数 FileStorage fs文件名FileStorageWRITE; 或 文件存储 fs; fs.open文件名 FileStorageWRITE; 您使用的第二个参数中的任何一个都是一个常量用于指定您可以对它们执行的操作类型WRITE、READ 或 APPEND。文件名中指定的扩展名还决定了将使用的输出格式。如果指定扩展名如 .xml.gz则输出甚至可以被压缩。 当 cvFileStorage 对象被销毁时该文件会自动关闭。但是您可以使用 release 函数显式调用此函数 司 司长。release;// 显式关闭 **文本和数字的输入和输出。**在 C 中数据结构使用 STL 库中的 输出运算符。在 Python 中改用 cvFileStoragewrite。要输出任何类型的数据结构我们首先需要指定其名称。我们只需将 this 的名称推送到 C 中的流中即可做到这一点。在 Python 中write 函数的第一个参数是 name。对于基本类型您可以按照以下值进行打印 fs “iterationNr” 100; 读入是一个简单的寻址通过 [] 运算符和强制转换操作或者通过 运算符进行读入。在 Python 中我们使用 getNode 进行寻址并使用 real int itNr; fs[“迭代Nr”] itNr; itNr int fs[“迭代Nr”]; **OpenCV 数据结构的输入/输出。**好吧它们的行为与基本的 C 和 Python 类型完全相同 垫 R Mat_eye3 3 T Mat_zeros3 1; fs “R” R;cvMat fs “T” T; fs[“R”] R;读取 cvMat fs[“T”] T; **向量数组和关联映射的输入/输出。**正如我之前提到的我们也可以输出映射和序列数组、向量。同样我们首先打印变量的名称然后我们必须指定我们的输出是序列还是映射。 对于序列在第一个元素之前打印“[”字符在最后一个元素之后打印“]”字符。使用 Python调用 where is 或 开始编写结构。调用以完成结构FileStorage.startWriteStruct(structure_name, struct_type)struct_typecv2.FileNode_MAPcv2.FileNode_SEQFileStorage.endWriteStruct() fs “strings” “[”;文本 - 字符串序列 fs “image1.jpg” “Awesomeness” “…/data/baboon.jpg”; fs “]”;关闭序列 // 关闭序列 对于地图钻头是相同的但现在我们使用“{”和“}”分隔符 fs “映射”;文本 - 映射 fs “{” “一” 1; fs “二” 2 “}”; 为了从中读取数据我们使用 cvFileNode 和 cvFileNodeIterator 数据结构。cvFileStorage 类或 Python 中的 getNode 函数的 [] 运算符返回 cvFileNode 数据类型。如果节点是连续的我们可以使用 cvFileNodeIterator 来遍历项目。在 Python 中at 函数可用于寻址序列的元素size 函数返回序列的长度 FileNode n fs[“字符串”];读取字符串序列 - Get 节点 if n.type FileNodeSEQ { Cerr “字符串不是一个序列FAIL“结束; 返回 1; } FileNodeIterator it n.begin it_end n.end;遍历节点 对于 ;它 it_end;it cout 字符串*it endl; 对于地图您可以再次使用 [] 运算符Python 中的 at 函数来访问给定的项目或 运算符 n fs[“映射”];从序列中读取映射 cout “两个 ” intn[“两个”]) ; ; cout “一 ” intn[“One”] endl endl; **读取和写入自己的数据结构。**假设您有一个数据结构例如 类 我的数据 { 公众 MyData A0 X0 id {} public // 数据成员 int一个; 双X; 字符串 ID; }; 在 C 中可以通过 OpenCV I/O XML/YAML 接口就像 OpenCV 数据结构一样通过在类内部和外部添加读取和写入函数来序列化它。在 Python 中您可以通过在类中实现读写函数来接近这一点。对于内部部分 void writeFileStorage fs const //写这个类的序列化 { fs “{” “A” A “X” X “id” id “}”; } void readconst FileNode node //读取此类的序列化 { A int节点[“A”]; X doublenode[“X”]; id 字符串node[“id”]; } 在 C 中您需要在类外部添加以下函数定义 static void writeFileStorage fs const stdstring const MyData x { x.写入fs; } static void readconst FileNode node MyData x const MyData default_value MyData{ ifnode.empty x default_value; 还 x.read节点; } 在这里您可以观察到在读取部分中我们定义了如果用户尝试读取不存在的节点会发生什么。在本例中我们只返回默认的初始化值但是更详细的解决方案是返回例如对象 ID 的负 1 值。 添加这四个函数后使用 运算符进行写入使用 运算符进行读取或为 Python 定义的输入/输出函数 我的数据 m1; fs “MyData” m;你自己的数据结构 fs[“MyData”] 米;阅读你自己的structure_ 或者尝试阅读不存在的读物 cout “尝试读取 NonExisting应使用其默认值初始化数据结构”。; fs[“不存在”] 米; cout endl “NonExisting ” endl m endl;
结果
好吧大多数情况下我们只是打印出定义的数字。在控制台的屏幕上您可以看到
写完成。
读数
100图片1.jpg
太棒了
狒狒.jpg
二、2;一 1
R [1 0 0;
0, 1, 0;
0, 0, 1]
T [0; 0; 0]
我的数据
{ id mydata1234 X 3.14159 A 97}
尝试读取 NonExist应使用其默认值初始化数据结构。
不存在
{ id X 0 A 0}
提示 使用文本编辑器打开 output.xml 以查看序列化数据。
在线教程
麻省理工学院人工智能视频教程 – 麻省理工人工智能课程人工智能入门 – 人工智能基础学习。Peter Norvig举办的课程EdX 人工智能 – 此课程讲授人工智能计算机系统设计的基本概念和技术。人工智能中的计划 – 计划是人工智能系统的基础部分之一。在这个课程中你将会学习到让机器人执行一系列动作所需要的基本算法。机器人人工智能 – 这个课程将会教授你实现人工智能的基本方法包括概率推算计划和搜索本地化跟踪和控制全部都是围绕有关机器人设计。机器学习 – 有指导和无指导情况下的基本机器学习算法机器学习中的神经网络 – 智能神经网络上的算法和实践经验斯坦福统计学习 有需要的小伙伴可以点击下方链接免费领取或者V扫描下方二维码免费领取 人工智能书籍
OpenCV中文版.(布拉德斯基等)OpenCV3计算机视觉Python语言实现第二版OpenCV3编程入门 毛星云编著数字图像处理_第三版人工智能:一种现代的方法深度学习面试宝典深度学习之PyTorch物体检测实战吴恩达DeepLearning.ai中文版笔记计算机视觉中的多视图几何PyTorch-官方推荐教程-英文版《神经网络与深度学习》(邱锡鹏-20191121)…
第一阶段零基础入门3-6个月
新手应首先通过少而精的学习看到全景图建立大局观。 通过完成小实验建立信心才能避免“从入门到放弃”的尴尬。因此第一阶段只推荐4本最必要的书而且这些书到了第二、三阶段也能继续用入门以后在后续学习中再“哪里不会补哪里”即可。 第二阶段基础进阶3-6个月
熟读《机器学习算法的数学解析与Python实现》并动手实践后你已经对机器学习有了基本的了解不再是小白了。这时可以开始触类旁通学习热门技术加强实践水平。在深入学习的同时也可以探索自己感兴趣的方向为求职面试打好基础。 第三阶段工作应用 这一阶段你已经不再需要引导只需要一些推荐书目。如果你从入门时就确认了未来的工作方向可以在第二阶段就提前阅读相关入门书籍对应“商业落地五大方向”中的前两本然后再“哪里不会补哪里”。
有需要的小伙伴可以点击下方链接免费领取或者V扫描下方二维码免费领取