2012-12-05 37 views
1

我對OpenCV中存儲矢量一個非常基本的查詢,但因爲我在MATLAB總是工作,我發現這真的是難以用C執行相同的向量運算++。所以這裏是我的問題,我已經使用基本的cvGoodFeaturesToTrack()和cvCalcOpticalFlowPyrLK()函數計算了光流,並找到了流線的終點並將它們作爲光流的線顯示在圖像上。OpenCV的向量生成C++和存儲爲文本文件

不過,我想存儲在一個向量,這些流線的終點,然後將其保存爲文本文件,然後我就可以發送到MATLAB閱讀。

我真的不知道我怎麼可以創建存儲這些點,並將它們保存在一個文本文件,這些向量。

任何人都可以幫忙嗎?

感謝,

佳日

+0

目前流水線點的形式是什麼?陣列?另一個stl類型? –

+0

喜奔, 的點最初存儲在變量「corners1」和初始化「corners2」如下: 'CvPoint2D32f * corners2 =新CvPoint2D32f [MAX_CORNERS]' 但隨後,密謀這裏是我做的與這些點: 'cvPoint P0 = cvPoint(cvRound(corners1 [I] .X) cvRound(corners1 [I] .Y));' – yashc

+0

在我以前的註釋的變量的 'i' 從1到找到的角點總數。因此,基本上,所有角點都存儲在每個幀的「角點1」和「角點2」中。 – yashc

回答

1

基於業務方案的有關問題的評論,我認爲這是做一個好辦法:

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會給你fiollowing矩陣:

Corners = 
    1 2 
    3 4 

假設你有在該列表中,其中x和y = 1和2,3和4

希望這有助於兩分。

+0

非常感謝@Ben。我會盡快實施。 – yashc

+0

由於一些奇怪的原因,我的編譯器(Xcode)似乎沒有檢測到fstream.h。它說沒有找到'fstream.h',這很奇怪,因爲我已經將項目定義爲CPP項目,代碼也是.cpp。 – yashc

+0

不知道我是否可以幫忙。也許問另一個SO問題,如果它是好的,你想提高答案嗎? –