2012-02-12 77 views

答えて

8

OpenCVは、グラフの描画とプロットのためのAPIの一部として、cvDrawPlot(cvMat * data、other args ...)の形式で関数を提供していません。 cvCreateImageで、他のイメージをしたかのようにプロットを作る関与だけOpenCVの関数呼び出しを使用して見

ほとんどのプロットのサンプル。

次に、データを繰り返して、cvRectangle,cvLine,cvCircleおよびcvPointのようなOpenCVプリミティブで画像を塗りつぶします。

その後、彼らは、作成したプロットの画像を表示するcvShowImageを呼び出します。

見つけたライブラリがあなたの望むものであれば、それを使うことができます。

また、データをファイルに書き込んで、gnuplotのような外部プロットツールを呼び出したり、VTKやplplotなどの他のビジュアライゼーションやプロットライブラリを使用してグラフを描画およびプロットする関数を呼び出すこともできます。

あなたはcvplotで発見したもの以外の別のライブラリ。

10

あなたはこれを試すことができます。 https://code.google.com/p/cvplot/

Matlabのスタイルプロット機能をOpenCVのために、のHighGUIに基づきます。ところで、それはC++のみです。

オープンソースです。

+0

私はcvplotの使い方がわかりません。しかし、ありがとう。私がShervinで試したプログラムも完璧に動作します。 x軸とy軸の値を見ることができます。 – Mzk

4

ではなく、粗が、日曜大工のアプローチ、CV上の折れ線グラフをプロットする伴うだろう::マット画像:

template <typename T> 
cv::Mat plotGraph(std::vector<T>& vals, int YRange[2]) 
{ 

    auto it = minmax_element(vals.begin(), vals.end()); 
    float scale = 1./ceil(*it.second - *it.first); 
    float bias = *it.first; 
    int rows = YRange[1] - YRange[0] + 1; 
    cv::Mat image = Mat::zeros(rows, vals.size(), CV_8UC3); 
    image.setTo(0); 
    for (int i = 0; i < (int)vals.size()-1; i++) 
    { 
     cv::line(image, cv::Point(i, rows - 1 - (vals[i] - bias)*scale*YRange[1]), cv::Point(i+1, rows - 1 - (vals[i+1] - bias)*scale*YRange[1]), Scalar(255, 0, 0), 1); 
    } 

    return image; 
} 

使用例:

vector<int> numbers(100); 
std::iota (numbers.begin(), numbers.end(), 0); 

int range[2] = {0, 100}; 
cv::Mat lineGraph = plotGraph(numbers, range); 

一つは、その後、使用することができますimshowまたはImage Watchグラフを表示

+0

APIは変更されています(私はOpenCV 3.0を使用しています)、 'cv :: line'は' cvLine'になっています。メソッドのシグネチャも変更されました。 –

+1

新しい文書でこれをチェックします。あなたはこれについて確信を持っていますか? http://docs.opencv.org/3.0-beta/modules/imgproc/doc/drawing_functions.html#line –

+1

私は見る...これは私のC++プログラムでは '' line ':識別子ではないのでfound ' –

2

https://github.com/leonardvandriel/cvplotをご覧ください。設定の少ないグラフをプロットすることができ、単一のウィンドウで複数のグラフをサポートします。 (注:露骨な自己宣伝)。

関連する問題