gpt4 book ai didi

c++ - 如何在 C++ 中创建这个 yml 文件(使用 opencv)

转载 作者:行者123 更新时间:2023-11-28 02:39:36 25 4
gpt4 key购买 nike

我有一个在 Matlab 中创建的 yml 文件,其他一些应用程序可以毫无问题地读取它。

生成的yml文件如下:

%YAML:1.0
myitems:
-
l: !!opencv-matrix
rows: 4
cols: 1
dt: d
data: [1.6040597671471776e+03, -5.9317478925963056e-02, -4.0214684178724552e-04, -1.0686329088084243e-03]
c: !!opencv-matrix
rows: 2
cols: 1
dt: d
data: [1.3524793229822997e+03, 1.8265878647908009e+03]
t: !!opencv-matrix
rows: 4
cols: 4
dt: d
data: [9.3969262078590843e-01, 0.0000000000000000e+00, -3.4202014332566871e-01, -4.2438920171761561e-02, 0.0000000000000000e+00, 1.0000000000000000e+00, 0.0000000000000000e+00, 0.0000000000000000e+00, 3.4202014332566871e-01, 0.0000000000000000e+00, 9.3969262078590843e-01, 0.0000000000000000e+00, 0.0000000000000000e+00, 0.0000000000000000e+00, 0.0000000000000000e+00, 1.0000000000000000e+00]
-
l: !!opencv-matrix
rows: 4
cols: 1
dt: d
data: [1.6035513799260334e+03, -5.8611163583081945e-02, -1.9961041844717854e-03, -5.7772898125416506e-04]
c: !!opencv-matrix
rows: 2
cols: 1
dt: d
data: [1.3748405387479991e+03, 1.8628349599457656e+03]
t: !!opencv-matrix
rows: 4
cols: 4
dt: d
data: [-3.5201238807168519e-03, 9.3725029294111806e-01, -3.4863949447768083e-01, -4.2438920171761561e-02, -9.9998222086817701e-01, -1.6211348792076591e-03, 5.7384553018963221e-03, 0.0000000000000000e+00, 4.8131772679647451e-03, 3.4865349604369644e-01, 9.3723933604021081e-01, 0.0000000000000000e+00, 0.0000000000000000e+00, 0.0000000000000000e+00, 0.0000000000000000e+00, 1.0000000000000000e+00]
-
l: !!opencv-matrix
rows: 4
cols: 1
dt: d
data: [1.5975668104752576e+03, -6.0221428459880273e-02, 8.9637904632662471e-04, -1.4944214307671109e-03]
c: !!opencv-matrix
rows: 2
cols: 1
dt: d
data: [1.3643523108057761e+03, 1.8451412053529805e+03]
t: !!opencv-matrix
rows: 4
cols: 4
dt: d
data: [-9.4399816022253547e-01, -6.0251161920311046e-04, -3.2995016362507984e-01, -4.2438920171761561e-02, 1.5488563810861311e-03, -9.9999540679978660e-01, -2.6052683623591024e-03, 0.0000000000000000e+00, -3.2994707839345838e-01, -2.9704139573240884e-03, 9.4399475745395067e-01, 0.0000000000000000e+00, 0.0000000000000000e+00, 0.0000000000000000e+00, 0.0000000000000000e+00, 1.0000000000000000e+00]
-
l: !!opencv-matrix
rows: 4
cols: 1
dt: d
data: [1.5966964716049326e+03, -5.7396164460785576e-02, -1.9997766878354986e-03, -6.3293353675991561e-04]
c: !!opencv-matrix
rows: 2
cols: 1
dt: d
data: [1.3583936708783401e+03, 1.8439285997544673e+03]
t: !!opencv-matrix
rows: 4
cols: 4
dt: d
data: [-1.0822465368656472e-03, -9.3985931913280085e-01, -3.4156008107163421e-01, -4.2438920171761561e-02, 9.9999940770171103e-01, -9.7771219684243270e-04, -4.7819984029824587e-04, 0.0000000000000000e+00, 1.1549311909389662e-04, -3.4156039629630369e-01, 9.3985982058137330e-01, 0.0000000000000000e+00, 0.0000000000000000e+00, 0.0000000000000000e+00, 0.0000000000000000e+00, 1.0000000000000000e+00]

我在 opencv (C++) 中有这段代码来创建相同的 yml 文件:

 cv::FileStorage fs(fileName, cv::FileStorage::WRITE);
fs << "myitems";
fs<<"{" ;
for(int i=0;i<4;i++)
{
fs<<"-" ;
fs<<"{" ;

fs<<"l"<<cv::Mat(l);
fs<<"c"<<cv::Mat(c);
fs<<"t"<<cv::Mat(t);
fs << "}" ;
}
fs << "}" ;

但是当我运行这段代码时,出现错误:下一行的元素名称不正确:

fs<<"-";

如何在 opencv 中创建类似的 yml 文件?

请注意,由于该文件是由 matlab 生成并用于其他应用程序,因此我无法更改 yml 文件的格式。

最佳答案

这里是 how to create一个类似的YAML file :

#include <opencv2/core/core.hpp>
#include <iostream>

int main()
{
cv::FileStorage fs("out.yaml", cv::FileStorage::WRITE);
fs << "myitems";
fs << "[" ;
for(int i=0; i<4; i++) {
fs << "{" ;
fs << "l" << cv::Mat::zeros(4,1,CV_64F);
fs << "c" << cv::Mat::zeros(2,1,CV_64F);
fs << "t" << cv::Mat::zeros(4,4,CV_64F);
fs << "}" ;
}
fs << "]" ;

return 0;
}

顶级节点“myitems”是一个包含 4 个节点的序列([, ..., ])。每个序列项都是一个未命名的映射({...})。这些映射中的每一个都包含三个名为“l”、“c”和“t”的矩阵。

关于c++ - 如何在 C++ 中创建这个 yml 文件(使用 opencv),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26424034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com