web-dev-qa-db-ja.com

初心者のためのOpenGLとOpenCV

私は現在C++プログラミングを学んでいる新入生です。私は数学と物理学が得意なので、OpenGLを使用した2D/3Dグラフィックスを専門としています。私の質問は、OpenGLとOpenCVの違いと、これらの領域の重複の量についてです。私が読んだものから、1つはグラフィックを作成し、もう1つはそれらを処理します。 3Dグラフィックスとそれに関連する数学についての本がたくさんあります。私がOpenGLで学んでいる同じ概念をOpenCVに適用できるかどうか疑問に思っています。 OpenGLとOpenCVの両方に特化できるC++ソフトウェアエンジニアになることは可能ですか、それとも非現実的な目標ですか?

2D/3Dグラフィックスプログラミングには数学と物理学の多大な知識が必要であることを理解しているため、これらの質問をしますが、OpenCVと、「ドアを開ける」ために必要な必須スキルについてはあまり知りません。

3
Jacob Perkins

OpenGLは3DグラフィックAPIです。 3Dシーンを記述するAPIを提供し、フレームバッファにレンダリングして、最終的に画面に表示します。それが持っているプリミティブは、頂点リスト、三角形リスト、法線ベクトルリストなどです。 2Dは3Dの特殊なケースです。 IIRC OpenGLは明示的な2Dサポートを備えていません(つまり、スプライトとビットブリット)

OpenCVはコンピュータービジョン(CV)APIであり、さまざまなCVアルゴリズム、Blob検出、テンプレートマッチングなどの実装を備えています。

OpenCVは通常、実際の画像データで動作し、OpenGLで生成されたグラフィックスでは動作しません。 (ゲームのフレームバッファー出力のみを表示するAIボットを作成しようとしていなかった場合を除き、まったく別の接線で表示されます。)

「OpenGLとOpenCVの両方に特化できるC++ソフトウェアエンジニアになることは可能ですか、それとも非現実的な目標ですか?」

もちろん、それらは異なるタイプのシステムであり、複数のことに特化することができます。 OpenGLと3Dグラフィックスについては、1つを習得すれば、おそらくそれらのいずれかを使用できます。

コンピュータビジョンの場合、1つのシステムをリーニングすると、別のシステムを正式に支援することになりますが、おそらくコンピュータグラフィックスほどではありません。

n.bこの質問はおそらく別のボードに属しています。

5
esoterik

私はOpenCVを使用したことがありませんが、私の知る限り、OpenGLとは大きく異なります。 OpenGLは、LOTを中心に構築されたC API(そのため、状態マシンと呼ばれることが多い)ですが、OpenCVは、テンプレートを多用する、よりオブジェクト指向のC++インターフェイスを公開しています。

OpenGLは、グラフィックスハードウェアの薄い抽象化レイヤーであることを意図しているため、ある意味でデバイスドライバーと考えることもできます。このAPIの主な焦点は、汎用コンピューティングではなく、リアルタイムレンダリングです。したがって、OpenGLが提供するツールは、主にできるだけ速く、効率的に画面にポリゴンを描画することに重点を置いています。

私はOpenGLとOpenCVをうまく対応させることはできませんが、私の理解では、CVはオフラインの画像処理に重点を置いているため、GLと比較するとまったく異なる概念です。ただし、OpenGLはOpenCVと組み合わせてCVによる画像処理の視覚化を実装するために使用されることが多いので、CVに焦点を合わせると、GLなどのグラフィックAPIを理解することでメリットが得られると思います。ゲームやCGフィルムなどのリアルタイムグラフィックスに主な関心がある場合は、OpenGLで十分です。これらの分野のコンピュータビジョンツールについて知る必要はあまりありません。

最後に、2D/3Dグラフィックスプログラミングには数学と物理学の知識が必要であるとあなたは言っています。あなたが数学に慣れていれば、人生はずっと楽になります。このフィールドが気に入ったら、まず数学を学び、次にOpenGLなどのグラフィックAPIを学んで理論を実装してください。

2
glampert