![]() |
OpenCV 4.13.0
Open Source Computer Vision
|
本節ではOpenGLとの相互運用について説明する。
OpenGLサポートを有効にするには、CMakeで WITH_OPENGL=ON を指定してOpenCVを構成する。現時点でOpenGLがサポートされるのは、WindowsおよびLinux上のWIN32、GTK、Qtバックエンドのみである(MacOSとAndroidはサポートされていない)。GTK-2.0バックエンドでは gtkglext-1.0 ライブラリが必要となる。
OpenGL機能を使用するには、まずOpenGLコンテキスト(ウィンドウまたはフレームバッファ)を作成する必要がある。これは namedWindow 関数、または他のOpenGLツールキット(例えばGLUT)を用いて行える。
名前空間 | |
| namespace | cv::ogl::ocl |
クラス | |
| class | cv::ogl::Arrays |
| OpenGL クライアントサイド頂点配列のラッパー。詳細... | |
| class | cv::ogl::Buffer |
| 参照カウント付きの OpenGL バッファオブジェクト用スマートポインタ。詳細... | |
| class | cv::ogl::Texture2D |
| 参照カウント付きの OpenGL 2D テクスチャメモリ用スマートポインタ。詳細... | |
列挙型 | |
| enum | cv::ogl::RenderModes { cv::ogl::POINTS = 0x0000 , cv::ogl::LINES = 0x0001 , cv::ogl::LINE_LOOP = 0x0002 , cv::ogl::LINE_STRIP = 0x0003 , cv::ogl::TRIANGLES = 0x0004 , cv::ogl::TRIANGLE_STRIP = 0x0005 , cv::ogl::TRIANGLE_FAN = 0x0006 , cv::ogl::QUADS = 0x0007 , cv::ogl::QUAD_STRIP = 0x0008 , cv::ogl::POLYGON = 0x0009 } |
| レンダーモード 詳細... | |
関数 | |
| void | cv::ogl::convertFromGLTexture2D (const Texture2D &texture, OutputArray dst) |
| Texture2D オブジェクトを OutputArray に変換する。 | |
| void | cv::ogl::convertToGLTexture2D (InputArray src, Texture2D &texture) |
| InputArray を Texture2D オブジェクトに変換する。 | |
| UMat | cv::ogl::mapGLBuffer (const Buffer &buffer, AccessFlag accessFlags=ACCESS_READ|ACCESS_WRITE) |
| Buffer オブジェクトを CL 側で処理できるようにマップする(UMat に変換する)。 | |
| void | cv::ogl::render (const Arrays &arr, InputArray indices, int mode=POINTS, Scalar color=Scalar::all(255)) |
| void | cv::ogl::render (const Arrays &arr, int mode=POINTS, Scalar color=Scalar::all(255)) |
| void | cv::ogl::render (const Texture2D &tex, Rect_< double > wndRect=Rect_< double >(0.0, 0.0, 1.0, 1.0), Rect_< double > texRect=Rect_< double >(0.0, 0.0, 1.0, 1.0)) |
| OpenGL のテクスチャまたはプリミティブをレンダリングする。 | |
| void | cv::cuda::setGlDevice (int device=0) |
| CUDAデバイスを設定し、OpenGLとの相互運用性を備えて現在のスレッド用に初期化する。 | |
| void | cv::ogl::unmapGLBuffer (UMat &u) |
| Buffer オブジェクトのマップを解除する(Buffer から以前にマップされた UMat を解放する)。 | |
| enum cv::ogl::RenderModes |
#include <opencv2/core/opengl.hpp>
レンダリングモード
| void cv::ogl::convertFromGLTexture2D | ( | const Texture2D & | texture, |
| OutputArray | dst ) |
#include <opencv2/core/opengl.hpp>
Texture2D オブジェクトをOutputArrayに変換する。
| texture | - 入力元の Texture2D オブジェクト。 |
| dst | - 出力先の OutputArray。 |
| void cv::ogl::convertToGLTexture2D | ( | InputArray | src, |
| Texture2D & | texture ) |
#include <opencv2/core/opengl.hpp>
InputArrayを Texture2D オブジェクトに変換する。
| src | - ソースとなる InputArray。 |
| texture | - 出力先の Texture2D オブジェクト。 |
| UMat cv::ogl::mapGLBuffer | ( | const Buffer & | buffer, |
| AccessFlag | accessFlags = ACCESS_READ|ACCESS_WRITE ) |
#include <opencv2/core/opengl.hpp>
Buffer オブジェクトをCL側で処理できるようマップする(UMat に変換する)。
本関数はGLバッファからCLバッファを作成し、続いてOpenCVの関数でバッファデータを処理できる UMat を構築する。現在の実装では、この方法で構築された UMat は対応するGLバッファオブジェクトを所有しないため、CL/GLバッファ間の関係を閉じるのはユーザの責任であり、unmapGLBuffer() 関数を明示的に呼び出す必要がある点に注意。
| buffer | - 入力元の Buffer オブジェクト。 |
| accessFlags | - データアクセスフラグ(ACCESS_READ|ACCESS_WRITE)。 |
| void cv::ogl::render | ( | const Arrays & | arr, |
| InputArray | indices, | ||
| int | mode = POINTS, | ||
| Scalar | color = Scalar::all(255) ) |
#include <opencv2/core/opengl.hpp>
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| arr | プリミティブ頂点の配列。 |
| indices | 頂点インデックスの配列(ホストメモリまたはデバイスメモリ)。 |
| mode | レンダーモード。cv::ogl::RenderModes のいずれか |
| color | すべての頂点の色。arr がカラー配列を含まない場合に使用される。 |
| void cv::ogl::render | ( | const Arrays & | arr, |
| int | mode = POINTS, | ||
| Scalar | color = Scalar::all(255) ) |
#include <opencv2/core/opengl.hpp>
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| arr | プリミティブ頂点の配列。 |
| mode | レンダーモード。cv::ogl::RenderModes のいずれか |
| color | すべての頂点の色。arr がカラー配列を含まない場合に使用される。 |
| void cv::ogl::render | ( | const Texture2D & | tex, |
| Rect_< double > | wndRect = Rect_< double >(0.0, 0.0, 1.0, 1.0), | ||
| Rect_< double > | texRect = Rect_< double >(0.0, 0.0, 1.0, 1.0) ) |
#include <opencv2/core/opengl.hpp>
OpenGLテクスチャまたはプリミティブをレンダリングする。
| tex | 描画するテクスチャ。 |
| wndRect | テクスチャを描画するウィンドウの領域(正規化座標)。 |
| texRect | 描画するテクスチャの領域(正規化座標)。 |
| void cv::cuda::setGlDevice | ( | int | device = 0 | ) |
#include <opencv2/core/opengl.hpp>
CUDAデバイスを設定し、現在のスレッドに対してOpenGL相互運用を有効にして初期化する。
本関数はOpenGLコンテキストの作成後、かつ任意のCUDA呼び出しの前に明示的に呼び出す必要がある。
| device | 0 から始まる CUDA デバイスのシステムインデックス。 |
| void cv::ogl::unmapGLBuffer | ( | UMat & | u | ) |
#include <opencv2/core/opengl.hpp>
Buffer オブジェクトのマップを解除する(以前に Buffer からマップされた UMat を解放する)。
mapGLBuffer() 関数の呼び出しによって以前に構築された各 UMat に対して、ユーザが本関数を明示的に呼び出す必要がある。
| u | - 入力元の UMat。mapGLBuffer() によって作成される。 |