2011-06-21 90 views
3

我在尋找類似:什麼是* plot * std :: vector <double>的簡單/最簡單的方法?

std::vector<double> X = some_math_function(); 
somenamespace :: plot( Wrapper(X)); // pop-up and display a graph of X on y-axis, 1 to X.size() on x-axis. 

顯然有重量級的方法,如建立GNU的陰謀或什麼的,我用的VTK圖表的東西。我只想要一個愚蠢的,貧民窟的陰謀出現。這是爲了粗略的調試來檢查一些東西,比如「矢量是否在變化?當我移動相機時它會突然跳動嗎?」等等。

+0

我不知道這是如何與OpenCV相關。 – karlphillip

+1

它不是特定的opencv,但1)數據流來自opencv函數和2)opencv允許顯示*圖像*容易,所以一個hacky的解決方案是將矢量寫入一個空的圖像,使一個非常貧民窟的陰謀功能。 –

回答

4

This thread似乎對這件事有不少建議。我沒有看到任何出於您想要的目的而成爲簡單圖書館的任何東西。

這裏有幾個輕量級的例子,但在我看來,如果你必須學會​​站起來任何庫,你可能會站起來像gnuplot一個受人尊敬的例子。在許多情況下,由於不得不面對更復雜的圖書館而失去的時間遠遠不能滿足社區支持和(相對)更加成熟的產品無法做到的。

koolplot

GOBLIN

5

如果這是調試爲什麼不只是輸出的載體分隔的文件和情節在Excel或gnuplot的什麼作爲單獨的步驟?

所以像

//untested 
ofstream myfilestream("myfile"); 
std::copy(X.begin(), X.end(), std::ostream_iterator<double>(myfilestream, '\n'); 

然後就繪製在什麼都工具你喜歡例如文件

gnuplot 
plot "myfile" with lines 
+0

那麼,不會爲X中的快速數據流工作。關於使用OpenCV imshow()打開我自己的繪圖儀,因爲它已經鏈接在... –

+0

我們在談論多少數據?如果數據流速度很快,寫入操作只需要緩衝到足以應付這種情況。顯然在一定的速度和數量下,這會打破,但你真的在這種情況下? –

+0

,但會在這種情況下gnuplot'看'臨時文件?或者你的意思是我應該調用一個shell並執行$ watch -n 0.2「gnuplot -onelinearg?\」myfile \「,其中線條爲」 –

-1

我記得很容易用gd在php中繪製曲線,但那是很久以前的事了。

2

您可以使用MathGL(跨平臺的GPL繪圖庫)。代碼看起來像

mglGraphZB gr;// create canvas 
mglData d; d.Set(X); // convert to internal format 
gr.YRange(d); // set range for y-axis 
gr.Plot(d); // plot it 
gr.Axis(); // draw axis if you need 
gr.WritePNG("1.png"); // save it 
相關問題