在 C++ 中创建 OpenCV 矢量并存储到文本文件

Posted

技术标签:

【中文标题】在 C++ 中创建 OpenCV 矢量并存储到文本文件【英文标题】:OpenCV vector creation in C++ and storing to text file 【发布时间】:2012-12-05 06:18:11 【问题描述】:

我有一个关于在 OpenCV 中存储向量的非常基本的查询,但由于我一直在 MATLAB 中工作,我发现在 C++ 中执行相同的向量操作非常困难。

所以这是我的问题,我已经使用基本的 cvGoodFeaturesToTrack() 和 cvCalcOpticalFlowPyrLK() 函数计算了光流,并找到了流线的端点并将它们作为光流线显示在图像上。

但是,我想将这些流线端点存储在一个向量中,然后将其保存为一个文本文件,然后我可以将其发送到 MATLAB 以供阅读。

我真的不知道如何创建这些向量来存储这些点并将它们保存在文本文件中。

谁能帮忙?

谢谢,

亚什

【问题讨论】:

流线点目前是什么形式?大批?另一种 stl 类型? 嗨 Ben,这些点最初存储在变量 'corners1' 和 'corners2' 中,它们的初始化如下:CvPoint2D32f* corners2 = new CvPoint2D32f[MAX_CORNERS]; 但是,为了绘制这里是我对这些点所做的事情:CvPoint p0=cvPoint(cvRound(corners1[i].x), cvRound(corners1[i].y)); 在我之前的评论中,变量“i”从 1 变为找到的角点总数。因此,基本上,所有角点都存储在每帧的“corners1”和“corners2”中。 【参考方案1】:

基于 OP 的 cmets 问题,我认为这是一个很好的方法:

std::ofstream matlabFile;
matlabFile.open("pointsOutput.m");
matlabFile << "Corners = [ ...\n";
for (int i = 0; i < MAX_CORNERS; ++i) 
    matlabFile << corners2[i].x << " " << corners2[i].y << "; ...\n";

matlabFile << "];";
matlabFile.close();

此代码应在本地目录中为您提供以下文件:

pointsOutput.m:

Corners = [ ...
1 2; ...
3 4; ...
];

在matlab中会给你下面的矩阵:

Corners = 
    1 2
    3 4

假设您在该列表中有两个点,x 和 y = 1 和 2、3 和 4。

希望这会有所帮助。

【讨论】:

非常感谢@Ben。我会立即尝试实施。 由于某种奇怪的原因,我的编译器(Xcode)似乎没有检测到 fstream.h。它说“fstream.h”未找到,这很奇怪,因为我已将项目定义为 CPP 项目,并且代码也是 .cpp。 不确定我是否可以提供帮助。也许再问一个 SO 问题,如果答案好,你想投票吗? 它可以工作...原来 iostream.h 是老式的...只需输入“iostream”就可以了。

以上是关于在 C++ 中创建 OpenCV 矢量并存储到文本文件的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 客户端中创建 Mat 对象,使用 opencv 从 C++ 服务器发送

BIMBIMFACE中创建矢量文本

在linux中创建使用opencv的C++动态库

C++ 3D 矢量模板

在 C++ 中创建多行文本框/文本字段,而不是 VC++

在 QML 中创建自定义 C++ 对象并将其存储在 C++ 模型中