2011-10-22 21 views
0

現在iplimageがopencvを使って変更されています。私は二次方程式の放物線のような弧を描く必要があり、opencvに組み込まれている基本的な描画関数を使用することはできません。私はopenglを調べていますが、ベジェ曲線が見つかります。これを達成するために使用する最良のライブラリは何でしょうか?IplImageに二次円弧を描く

答えて

0

OpenGLに移行することはお勧めしません(あなたが投稿で提供した内容に基づいています)。

簡単なアプローチを取る場合は、2次方程式をポイントごとに解くことができます(つまり、xを独立変数とし、yを解くと仮定します)。 xとyの両方がわかったら、指定された点に色を描くことができます。私は、OpenCVのピクセルを着色する方法を示したスニペットを以下に示しました。あなたは OpenCVののベジェ曲線のサポートを使用することができ、

void overlay(IplImage *o, const IplImage *m, const CvScalar &color) 
{ 
    CvSize size = cvGetSize(o); 

    unsigned char *p1 = NULL; 
    unsigned char *p2 = NULL; 

    for (size_t r=0;r<size_t(size.height);r++) 
    for (size_t c=0;c<size_t(size.width);c++) 
     { 
     p1 = cvPtr2D(m, r, c); 
     if (p1[0] == 255) 
      { 
      p2 = cvPtr2D(o, r, c); 

      p2[0] = color.val[0]; // R 
      p2[1] = color.val[1]; // G 
      p2[2] = color.val[2]; // B 
      } 
     } 
} 

代わりなど、それは私のために働いたが、それは、アカウントに任意のアンチエイリアシング、透明性、サブピクセル精度を取ることはありません。それは、このコードを取ります OpenCVのベジェ曲線のサードパーティ製ライブラリ。私は過去にthis oneと実験しました。少しの計算で、重み付きベジェ曲線を使って任意の円錐断面を表すことができます。 wikipediaページの一番下にあるRationalベジエ曲線セクションをご覧ください。Bezier Curve

+0

OpenCVのは、ベジェ曲線をサポート? – Jacob

+1

@Jacob:良いキャッチ - 彼らはネイティブにサポートされているとは思わない。私は過去にサードパーティのものを試しました。回答が編集されました。 – Throwback1986

+0

私は現在放物線上にある約7点のxとyの値を持っており、私は方程式を知っています。私は病気が私が知っているものの間の線のポイントを記入すると思う。 –

0

thisページにあります。それはうまくいくと私はiplimageをglutで使うことができる方法に変えることができなければ、opencvでこのアルゴリズムを適用することができると確信しています。 の下の と非常に似ています。

0

OpenCV cvEllipseだけで十分です。パラメータの使い方に注意してください。

cvEllipse(CvArr * IMG、CvPoint中心、CvSizeは軸、二重角、ダブルstartAngleの、二重endAngle、CvScalar色、INT厚み= 1、INT線種= 8、INTシフト= 0)