OpenCV 5.0.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 5.0.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。

Hierarchical Data Format バージョン 5 のインターフェース。 さらに表示...

#include <opencv2/hdf/hdf5.hpp>

Collaboration diagram for cv::hdf::HDF5:

公開型

enum  {
  H5_UNLIMITED = -1 ,
  H5_NONE = -1 ,
  H5_GETDIMS = 100 ,
  H5_GETMAXDIMS = 101 ,
  H5_GETCHUNKDIMS = 102
}
 

公開メンバ関数

virtual ~HDF5 ()
 
virtual void atdelete (const String &atlabel)=0
 
virtual bool atexists (const String &atlabel) const =0
 
virtual void atread (double *value, const String &atlabel)=0
 
virtual void atread (int *value, const String &atlabel)=0
 
virtual void atread (OutputArray value, const String &atlabel)=0
 
virtual void atread (String *value, const String &atlabel)=0
 
virtual void atwrite (const double value, const String &atlabel)=0
 
virtual void atwrite (const int value, const String &atlabel)=0
 
virtual void atwrite (const String &value, const String &atlabel)=0
 
virtual void atwrite (InputArray value, const String &atlabel)=0
 
virtual void close ()=0
 hdf5 オブジェクトをクローズして解放する。
 
virtual void dscreate (const int n_dims, const int *sizes, const int type, const String &dslabel) const =0
 
virtual void dscreate (const int n_dims, const int *sizes, const int type, const String &dslabel, const int compresslevel) const =0
 
virtual void dscreate (const int n_dims, const int *sizes, const int type, const String &dslabel, const int compresslevel, const int *dims_chunks) const =0
 n 次元データセット(シングルチャンネルまたはマルチチャンネル型)のストレージを生成して確保する。
 
virtual void dscreate (const int rows, const int cols, const int type, const String &dslabel) const =0
 
virtual void dscreate (const int rows, const int cols, const int type, const String &dslabel, const int compresslevel) const =0
 
virtual void dscreate (const int rows, const int cols, const int type, const String &dslabel, const int compresslevel, const int *dims_chunks) const =0
 2 次元シングルチャンネルまたはマルチチャンネルのデータセットのストレージを生成して確保する。
 
virtual void dscreate (const int rows, const int cols, const int type, const String &dslabel, const int compresslevel, const vector< int > &dims_chunks) const =0
 
virtual void dscreate (const vector< int > &sizes, const int type, const String &dslabel, const int compresslevel=HDF5::H5_NONE, const vector< int > &dims_chunks=vector< int >()) const =0
 
virtual vector< int > dsgetsize (const String &dslabel, int dims_flag=HDF5::H5_GETDIMS) const =0
 データセットのサイズを取得する。
 
virtual int dsgettype (const String &dslabel) const =0
 データセットの型を取得する。
 
virtual void dsinsert (InputArray Array, const String &dslabel) const =0
 
virtual void dsinsert (InputArray Array, const String &dslabel, const int *dims_offset) const =0
 
virtual void dsinsert (InputArray Array, const String &dslabel, const int *dims_offset, const int *dims_counts) const =0
 Mat オブジェクトを指定されたデータセットに挿入または上書きし、unlimited プロパティが許せばデータセットサイズを自動的に拡張する。
 
virtual void dsinsert (InputArray Array, const String &dslabel, const vector< int > &dims_offset, const vector< int > &dims_counts=vector< int >()) const =0
 
virtual void dsread (OutputArray Array, const String &dslabel) const =0
 
virtual void dsread (OutputArray Array, const String &dslabel, const int *dims_offset) const =0
 
virtual void dsread (OutputArray Array, const String &dslabel, const int *dims_offset, const int *dims_counts) const =0
 hdf5ファイルから特定のデータセットを Mat オブジェクトに読み込む。
 
virtual void dsread (OutputArray Array, const String &dslabel, const vector< int > &dims_offset, const vector< int > &dims_counts=vector< int >()) const =0
 
virtual void dswrite (InputArray Array, const String &dslabel) const =0
 
virtual void dswrite (InputArray Array, const String &dslabel, const int *dims_offset) const =0
 
virtual void dswrite (InputArray Array, const String &dslabel, const int *dims_offset, const int *dims_counts) const =0
 Mat オブジェクトをhdf5ファイルの指定されたデータセットに書き込むか上書きする。
 
virtual void dswrite (InputArray Array, const String &dslabel, const vector< int > &dims_offset, const vector< int > &dims_counts=vector< int >()) const =0
 
virtual void grcreate (const String &grlabel)=0
 グループを作成する。
 
virtual bool hlexists (const String &label) const =0
 ラベルが存在するかどうかを確認する。
 
virtual void kpcreate (const int size, const String &kplabel, const int compresslevel=H5_NONE, const int chunks=H5_NONE) const =0
 cv::KeyPoint データセット用の専用ストレージを生成して確保する。
 
virtual int kpgetsize (const String &kplabel, int dims_flag=HDF5::H5_GETDIMS) const =0
 キーポイントデータセットのサイズを取得する。
 
virtual void kpinsert (const vector< KeyPoint > keypoints, const String &kplabel, const int offset=H5_NONE, const int counts=H5_NONE) const =0
 指定したデータセットに KeyPoint のリストを挿入または上書きし、unlimited プロパティが許す場合はデータセットサイズを自動拡張する。
 
virtual void kpread (vector< KeyPoint > &keypoints, const String &kplabel, const int offset=H5_NONE, const int counts=H5_NONE) const =0
 hdf5 ファイルから特定のキーポイントデータセットを vector<KeyPoint> オブジェクトへ読み込む。
 
virtual void kpwrite (const vector< KeyPoint > keypoints, const String &kplabel, const int offset=H5_NONE, const int counts=H5_NONE) const =0
 KeyPoint のリストを hdf5 ファイルの指定したデータセットへ書き込みまたは上書きする。
 

詳細説明

Hierarchical Data Format バージョン 5 のインターフェース。

このモジュールは hdf5 が正しくインストールされている場合にのみコンパイルされることに注意。

列挙型メンバ詳解

◆ anonymous enum

anonymous enum
列挙値
H5_UNLIMITED 

次元サイズは無制限。

関連項目
dscreate()
H5_NONE 

圧縮なし。

関連項目
dscreate()
H5_GETDIMS 

データセットの次元情報を取得する。

関連項目
dsgetsize()
H5_GETMAXDIMS 

データセットの最大次元情報を取得する。

関連項目
dsgetsize()
H5_GETCHUNKDIMS 

データセットのチャンクサイズを取得する。

関連項目
dsgetsize()

構築子と解体子の詳解

◆ ~HDF5()

virtual cv::hdf::HDF5::~HDF5 ( )
inlinevirtual

メンバ関数詳解

◆ atdelete()

virtual void cv::hdf::HDF5::atdelete ( const String & atlabel)
pure virtual

ルートグループから属性を削除する。

引数
atlabel削除する属性。
覚え書き
指定した属性が存在しない場合、CV_Error() が呼び出される。事前に存在するかどうかを確認するには atexists() を使用する。
参照
atexists, atwrite, atread

◆ atexists()

virtual bool cv::hdf::HDF5::atexists ( const String & atlabel) const
pure virtual

指定した属性がルートグループに存在するかどうかを確認する。

引数
atlabel存在を確認する属性名。
戻り値
属性が存在すれば true、存在しなければ false。
参照
atdelete, atwrite, atread

◆ atread() [1/4]

virtual void cv::hdf::HDF5::atread ( double * value,
const String & atlabel )
pure virtual

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

◆ atread() [2/4]

virtual void cv::hdf::HDF5::atread ( int * value,
const String & atlabel )
pure virtual

ルートグループから属性を読み込む。

引数
value属性の読み込み先となるアドレス
atlabel属性名

次の例は、cv::String 型の属性を読み込む方法を示す:

String expected_attr_str;
h5io->atread(&expected_attr_str, attr_str_name);
覚え書き
属性は必ず存在しなければならず、そうでない場合は CV_Error() が呼び出される。事前に存在するかどうかを確認するには atexists() を使用する。
参照
atexists, atdelete, atwrite

◆ atread() [3/4]

virtual void cv::hdf::HDF5::atread ( OutputArray value,
const String & atlabel )
pure virtual

ルートグループから属性を読み込む。

引数
value属性値。現時点では、n次元の連続したマルチチャンネル配列のみサポートされている。
atlabel属性名。
覚え書き
属性は必ず存在しなければならず、そうでない場合は CV_Error() が呼び出される。事前に存在するかどうかを確認するには atexists() を使用する。
参照
atexists, atdelete, atwrite

◆ atread() [4/4]

virtual void cv::hdf::HDF5::atread ( String * value,
const String & atlabel )
pure virtual

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

◆ atwrite() [1/4]

virtual void cv::hdf::HDF5::atwrite ( const double value,
const String & atlabel )
pure virtual

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

◆ atwrite() [2/4]

virtual void cv::hdf::HDF5::atwrite ( const int value,
const String & atlabel )
pure virtual

ルートグループ内に属性を書き込む。

引数
value属性値。
atlabel属性名。

次の例は、cv::String 型の属性を書き込む方法を示す:

String attr_str_name = "string attribute";
String attr_str = "Hello HDF5 from OpenCV!";
if (!h5io->atexists(attr_str_name))
h5io->atwrite(attr_str, attr_str_name);
覚え書き
指定した属性が既に存在する場合、CV_Error() が呼び出される。事前に存在するかどうかを確認するには atexists() を使用する。また、既に存在する場合に削除するには atdelete() を使用する。
参照
atexists, atdelete, atread

◆ atwrite() [3/4]

virtual void cv::hdf::HDF5::atwrite ( const String & value,
const String & atlabel )
pure virtual

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

◆ atwrite() [4/4]

virtual void cv::hdf::HDF5::atwrite ( InputArray value,
const String & atlabel )
pure virtual

ルートグループに属性を書き込む。

引数
value属性値。現時点では、n次元の連続したマルチチャンネル配列のみサポートされている。
atlabel属性名。
覚え書き
指定した属性が既に存在する場合、CV_Error() が呼び出される。事前に存在するかどうかを確認するには atexists() を使用する。また、既に存在する場合に削除するには atdelete() を使用する。
参照
atexists, atdelete, atread.

◆ close()

virtual void cv::hdf::HDF5::close ( )
pure virtual

hdf5 オブジェクトをクローズして解放する。

◆ dscreate() [1/8]

virtual void cv::hdf::HDF5::dscreate ( const int n_dims,
const int * sizes,
const int type,
const String & dslabel ) const
pure virtual

◆ dscreate() [2/8]

virtual void cv::hdf::HDF5::dscreate ( const int n_dims,
const int * sizes,
const int type,
const String & dslabel,
const int compresslevel ) const
pure virtual

◆ dscreate() [3/8]

virtual void cv::hdf::HDF5::dscreate ( const int n_dims,
const int * sizes,
const int type,
const String & dslabel,
const int compresslevel,
const int * dims_chunks ) const
pure virtual

n 次元データセット(シングルチャンネルまたはマルチチャンネル型)のストレージを生成して確保する。

引数
n_dims次元数を指定する
sizes各次元のサイズを格納した配列
type使用する型。例えば CV_8UC3、CV_32FC1 など。
dslabelhdf5 データセットのラベルを指定する。既存のデータセットラベルを指定するとエラーになる。
compresslevel使用する圧縮レベル 0〜9 を指定する。H5_NONE がデフォルト値で、圧縮なしを意味する。値 0 も圧縮なしを意味する。値 9 は最良の圧縮率を示す。圧縮レベルが高いほど計算コストも高くなる点に注意。圧縮には GNU gzip を利用する。
dims_chunks配列の各メンバーは、ブロック I/O に使用するチャンクサイズを指定する。デフォルトの NULL はチャンクをまったく使用しないことを意味する。
覚え書き
データセットが既に存在する場合、例外がスローされる。データセットの存在は hlexists() を使って確認できる。
  • 6次元の記憶領域を作成する以下の例を参照:
    // open / autocreate hdf5 file
    cv::Ptr<cv::hdf::HDF5> h5io = cv::hdf::open( "mytest.h5" );
    // create space for 6 dimensional CV_64FC2 matrix
    if ( ! h5io->hlexists( "nddata" ) )
    int n_dims = 5;
    int dsdims[n_dims] = { 100, 100, 20, 10, 5, 5 };
    h5io->dscreate( n_dims, sizes, CV_64FC2, "nddata" );
    else
    printf("DS already created, skipping\n" );
    // release
    h5io->close();
    std::shared_ptr< _Tp > Ptr
    Definition cvstd_wrapper.hpp:23
    #define CV_64FC2
    Definition interface.h:114
    Ptr< HDF5 > open(const String &HDF5Filename)
    Open or create hdf5 file.
覚え書き
圧縮を有効にするには内部チャンキングが必要となる。チャンキングは読み書きの両方でアクセス速度を大幅に改善でき、特にデータセット内でオフセットをずらすウィンドウアクセスのロジックで有効である。カスタムチャンキングを指定しない場合、データセット全体のサイズを単一の大きなデータチャンクとするデフォルトのチャンキングが適用される。
  • 最初の次元に対するチャンキングを用いたレベル 0 圧縮(浅い圧縮)の例を以下に示す。これによりストレージは 100 個のデータチャンクで構成される:
    // open / autocreate hdf5 file
    cv::Ptr<cv::hdf::HDF5> h5io = cv::hdf::open( "mytest.h5" );
    // create space for 6 dimensional CV_64FC2 matrix
    if ( ! h5io->hlexists( "nddata" ) )
    int n_dims = 5;
    int dsdims[n_dims] = { 100, 100, 20, 10, 5, 5 };
    int chunks[n_dims] = { 1, 100, 20, 10, 5, 5 };
    h5io->dscreate( n_dims, dsdims, CV_64FC2, "nddata", 0, chunks );
    else
    printf("DS already created, skipping\n" );
    // release
    h5io->close();
覚え書き
sizes 配列内の値 H5_UNLIMITED は、その次元のデータが 無制限 であることを意味する。したがって無制限方向にはいつでもデータセットを拡張できる。いずれかの次元に H5_UNLIMITED が存在する場合は、カスタムチャンキングの定義が必須である。無制限シナリオではその次元のデフォルトサイズが 0 となり、データセット書き込み時に拡張されるため、デフォルトのチャンキングは定義されない。一部の次元に H5_UNLIMITED を持つデータセットへ書き込むには、定義済みのデータ空間にのみ書き込める dswrite() ではなく、無制限次元での拡張を可能にする dsinsert() を使用する必要がある(dswrite() は定義済みデータ空間への書き込みのみを許可する)。

◆ dscreate() [4/8]

virtual void cv::hdf::HDF5::dscreate ( const int rows,
const int cols,
const int type,
const String & dslabel ) const
pure virtual

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

◆ dscreate() [5/8]

virtual void cv::hdf::HDF5::dscreate ( const int rows,
const int cols,
const int type,
const String & dslabel,
const int compresslevel ) const
pure virtual

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

◆ dscreate() [6/8]

virtual void cv::hdf::HDF5::dscreate ( const int rows,
const int cols,
const int type,
const String & dslabel,
const int compresslevel,
const int * dims_chunks ) const
pure virtual

2 次元シングルチャンネルまたはマルチチャンネルのデータセットのストレージを生成して確保する。

引数
rows行数を指定する
cols列数を指定する
type使用する型。例えば CV_8UC3、CV_32FC1 など。
dslabelhdf5 データセットのラベルを指定する。既存のデータセットラベルを指定するとエラーになる。
compresslevel使用する圧縮レベル 0〜9 を指定する。H5_NONE がデフォルト値で、圧縮なしを意味する。値 0 も圧縮なしを意味する。値 9 は最良の圧縮率を示す。圧縮レベルが高いほど計算コストも高くなる点に注意。圧縮には GNU gzip を利用する。
dims_chunks配列の各メンバーは、ブロック I/O に使用するチャンクサイズを指定する。デフォルトの NULL はチャンクをまったく使用しないことを意味する。
覚え書き
データセットが既に存在する場合、例外がスローされる(CV_Error() が呼び出される)。
  • データセットの存在は hlexists() を使って確認できる。次の例を参照:
    // open / autocreate hdf5 file
    cv::Ptr<cv::hdf::HDF5> h5io = cv::hdf::open( "mytest.h5" );
    // create space for 100x50 CV_64FC2 matrix
    if ( ! h5io->hlexists( "hilbert" ) )
    h5io->dscreate( 100, 50, CV_64FC2, "hilbert" );
    else
    printf("DS already created, skipping\n" );
    // release
    h5io->close();
覚え書き
圧縮を有効にするには内部チャンキングが必要となる。チャンキングは読み書きの両方でアクセス速度を大幅に改善でき、特にデータセット内でオフセットをずらすウィンドウアクセスのロジックで有効である。カスタムチャンキングを指定しない場合、データセット全体のサイズを単一の大きなデータチャンクとするデフォルトのチャンキングが適用される。
  • 内部のデフォルトチャンキングを用いたレベル 9 圧縮の例を以下に示す:
    // open / autocreate hdf5 file
    cv::Ptr<cv::hdf::HDF5> h5io = cv::hdf::open( "mytest.h5" );
    // create level 9 compressed space for CV_64FC2 matrix
    if ( ! h5io->hlexists( "hilbert", 9 ) )
    h5io->dscreate( 100, 50, CV_64FC2, "hilbert", 9 );
    else
    printf("DS already created, skipping\n" );
    // release
    h5io->close();
覚え書き
rows または cols あるいは両方に対する H5_UNLIMITED の値は、指定した次元でデータが無制限であることを意味し、そのため行、列、または両方向に対していつでもデータセットを拡張できる。いずれかの次元に H5_UNLIMITED が存在する場合、カスタムチャンキングを定義する必要がある。無制限のシナリオではその次元のデフォルトサイズがゼロとなり、データセットへの書き込みに応じて拡張されるため、デフォルトのチャンキングは定義されない。一部の次元に H5_UNLIMITED を持つデータセットへの書き込みには、定義済みのデータ空間内にしか書き込めない dswrite() ではなく、無制限次元での拡張を可能にする dsinsert() が必要である。
覚え書き
これはスレッドセーフではなく、データセット作成時に一度だけ呼び出す必要がある。そうでない場合は例外が発生する。単一の hdf5 ファイル内に複数のデータセットを持つことは許可されている。

◆ dscreate() [7/8]

virtual void cv::hdf::HDF5::dscreate ( const int rows,
const int cols,
const int type,
const String & dslabel,
const int compresslevel,
const vector< int > & dims_chunks ) const
pure virtual

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

◆ dscreate() [8/8]

virtual void cv::hdf::HDF5::dscreate ( const vector< int > & sizes,
const int type,
const String & dslabel,
const int compresslevel = HDF5::H5_NONE,
const vector< int > & dims_chunks = vector< int >() ) const
pure virtual

◆ dsgetsize()

virtual vector< int > cv::hdf::HDF5::dsgetsize ( const String & dslabel,
int dims_flag = HDF5::H5_GETDIMS ) const
pure virtual

データセットのサイズを取得する。

引数
dslabel測定対象の hdf5 データセットのラベルを指定する。
dims_flagH5_GETDIMS ではデータセットの次元、H5_GETMAXDIMS ではデータセットの最大次元、H5_GETCHUNKDIMS ではチャンクサイズを取得する。

データセットの各次元のサイズを格納した vector オブジェクトを返す。

覚え書き
結果として得られる vector のサイズはデータセットの次元数と一致する。デフォルトでは H5_GETDIMS は実際のデータセットの次元を返す。H5_GETMAXDIM フラグを使用すると、許容される最大の次元を取得する。これは通常は実際のデータセットの次元と一致するが、データセットが一部の次元でunlimitedモードで準備されていた場合は H5_UNLIMITED 値を保持することがある。これはデータセット全体または部分集合を上書きする前に既存のデータセットの次元を確認するのに役立つ。サイズ超過のソースデータをデータセットの対象へ書き込もうとすると例外がスローされる。H5_GETCHUNKDIMS は、データセットがチャンキングオプション付きで作成されていればチャンクの次元を返し、そうでなければ返される vector のサイズはゼロとなる。

◆ dsgettype()

virtual int cv::hdf::HDF5::dsgettype ( const String & dslabel) const
pure virtual

データセットの型を取得する。

引数
dslabel確認対象の hdf5 データセットのラベルを指定する。

格納された行列の型を返す。これは CvMat の型システムと互換性のある識別子であり、例えば CV_16SC5(16 ビット符号付き 5 チャンネル配列)などである。

覚え書き
結果は CV_MAT_CN() で解析してチャンネル数を取得し、CV_MAT_DEPTH() でネイティブの cvdata 型を取得できる。これはスレッドセーフである。

◆ dsinsert() [1/4]

virtual void cv::hdf::HDF5::dsinsert ( InputArray Array,
const String & dslabel ) const
pure virtual

◆ dsinsert() [2/4]

virtual void cv::hdf::HDF5::dsinsert ( InputArray Array,
const String & dslabel,
const int * dims_offset ) const
pure virtual

◆ dsinsert() [3/4]

virtual void cv::hdf::HDF5::dsinsert ( InputArray Array,
const String & dslabel,
const int * dims_offset,
const int * dims_counts ) const
pure virtual

Mat オブジェクトを指定されたデータセットに挿入または上書きし、unlimited プロパティが許せばデータセットサイズを自動的に拡張する。

引数
Array書き込む Mat データ配列を指定する。
dslabel書き込み先となる hdf5 データセットのラベルを指定する。
dims_offset配列の各メンバーは、InputArray をデータセットに(上書き)書き込む開始位置を、データセットの各次元についてのオフセットとして指定する。
dims_counts配列の各メンバーは、InputArray からデータセットへ書き込むデータ量を、データセットの各次元について指定する。

Mat オブジェクトを対象のデータセットに書き込み、許可されていればデータセットの次元を自動拡張する。

覚え書き
dswrite() とは異なり、データセットは自動的に作成されないMat のみがサポートされ、それは連続している必要がある。dsinsert() がデータセット次元の外側の領域に対して行われ、その次元がunlimitedモードである場合、データセットは拡張される。そうでない場合は例外がスローされる。特定または複数の次元にunlimitedプロパティを持つデータセットを作成するには、dscreate() と作成時の省略可能な H5_UNLIMITED フラグを参照。同一のデータセットに対してはスレッドセーフではないが、複数のデータセットを単一のhdf5ファイル内に統合できる。
  • 以下の例は無制限の行 x 100列を作成し、単一の100x100 CV_64FC2 をデータセット上で dsinsert() を用いて5回行を拡張する。最終的なサイズは5x100行と100列となり、H行列が行方向に5回反映される。チャンクサイズは100x100で、これはH行列のサイズに対して最適化されており圧縮は無効である。ルーチンが複数回呼ばれた場合、データセットは単に上書きされる:
    // dual channel hilbert matrix
    cv::Mat H(50, 100, CV_64FC2);
    for(int i = 0; i < H.rows; i++)
    for(int j = 0; j < H.cols; j++)
    {
    H.at<cv::Vec2d>(i,j)[0] = 1./(i+j+1);
    H.at<cv::Vec2d>(i,j)[1] = -1./(i+j+1);
    count++;
    }
    // open / autocreate hdf5 file
    cv::Ptr<cv::hdf::HDF5> h5io = cv::hdf::open( "mytest.h5" );
    // optimise dataset by chunks
    int chunks[2] = { 100, 100 };
    // create Unlimited x 100 CV_64FC2 space
    h5io->dscreate( cv::hdf::HDF5::H5_UNLIMITED, 100, CV_64FC2, "hilbert", cv::hdf::HDF5::H5_NONE, chunks );
    // write into first half
    int offset[2] = { 0, 0 };
    for ( int t = 0; t < 5; t++ )
    {
    offset[0] += 100 * t;
    h5io->dsinsert( H, "hilbert", offset );
    }
    // release
    h5io->close();
    Comma-separated Matrix Initializer.
    Definition mat.hpp:964

◆ dsinsert() [4/4]

virtual void cv::hdf::HDF5::dsinsert ( InputArray Array,
const String & dslabel,
const vector< int > & dims_offset,
const vector< int > & dims_counts = vector< int >() ) const
pure virtual

◆ dsread() [1/4]

virtual void cv::hdf::HDF5::dsread ( OutputArray Array,
const String & dslabel ) const
pure virtual

◆ dsread() [2/4]

virtual void cv::hdf::HDF5::dsread ( OutputArray Array,
const String & dslabel,
const int * dims_offset ) const
pure virtual

◆ dsread() [3/4]

virtual void cv::hdf::HDF5::dsread ( OutputArray Array,
const String & dslabel,
const int * dims_offset,
const int * dims_counts ) const
pure virtual

hdf5ファイルから特定のデータセットを Mat オブジェクトに読み込む。

引数
Array読み込んだデータが返される Mat コンテナ。
dslabel読み込み元となる hdf5 データセットのラベルを指定する。
dims_offset配列の各メンバーは、データセットから OutputArray への読み込みを開始する位置を、各次元についてのオフセットとして指定する。
dims_counts配列の各要素は、データセットの各次元のうち OutputArray に読み込むデータ量を指定する。

格納されたデータセットを反映する Mat オブジェクトを読み出す。

覚え書き
hdf5ファイルが存在しない場合は例外がスローされる。データセットの有無を確認するには hlexists() を使用する。スレッドセーフである。
  • 以下はデータセットを読み込む例である:
    // open hdf5 file
    cv::Ptr<cv::hdf::HDF5> h5io = cv::hdf::open( "mytest.h5" );
    // blank Mat container
    // read hibert dataset
    h5io->read( H, "hilbert" );
    // release
    h5io->close();
  • 以下は2行目・3要素目から3x5の部分行列を読み込む例である。
    // open hdf5 file
    cv::Ptr<cv::hdf::HDF5> h5io = cv::hdf::open( "mytest.h5" );
    // blank Mat container
    int offset[2] = { 1, 2 };
    int counts[2] = { 3, 5 };
    // read hibert dataset
    h5io->read( H, "hilbert", offset, counts );
    // release
    h5io->close();

◆ dsread() [4/4]

virtual void cv::hdf::HDF5::dsread ( OutputArray Array,
const String & dslabel,
const vector< int > & dims_offset,
const vector< int > & dims_counts = vector< int >() ) const
pure virtual

◆ dswrite() [1/4]

virtual void cv::hdf::HDF5::dswrite ( InputArray Array,
const String & dslabel ) const
pure virtual

◆ dswrite() [2/4]

virtual void cv::hdf::HDF5::dswrite ( InputArray Array,
const String & dslabel,
const int * dims_offset ) const
pure virtual

◆ dswrite() [3/4]

virtual void cv::hdf::HDF5::dswrite ( InputArray Array,
const String & dslabel,
const int * dims_offset,
const int * dims_counts ) const
pure virtual

Mat オブジェクトをhdf5ファイルの指定されたデータセットに書き込むか上書きする。

引数
Array書き込む Mat データ配列を指定する。
dslabel書き込み先となる hdf5 データセットのラベルを指定する。
dims_offset配列の各メンバーは、InputArray をデータセットに(上書き)書き込む開始位置を、データセットの各次元についてのオフセットとして指定する。
dims_counts配列の各要素は、InputArray からデータセットへ書き込むデータ量をデータセットの各次元について指定する。

Mat オブジェクトを対象のデータセットに書き込む。

覚え書き
データセットが作成されておらず存在しない場合、それは自動的に作成される。Mat のみがサポートされ、それは連続している必要がある。これはスレッドセーフだが、書き込みは互いに重ならない別々の領域に対して行うことを推奨する。複数のデータセットを単一のhdf5ファイル内に書き込むことができる。
  • 以下は100x100のCV_64FC2行列をデータセットに書き込む例である。データセットの事前作成は不要である。ルーチンを複数回呼び出した場合、データセットは単に上書きされる:
    // dual channel hilbert matrix
    cv::Mat H(100, 100, CV_64FC2);
    for(int i = 0; i < H.rows; i++)
    for(int j = 0; j < H.cols; j++)
    {
    H.at<cv::Vec2d>(i,j)[0] = 1./(i+j+1);
    H.at<cv::Vec2d>(i,j)[1] = -1./(i+j+1);
    count++;
    }
    // open / autocreate hdf5 file
    cv::Ptr<cv::hdf::HDF5> h5io = cv::hdf::open( "mytest.h5" );
    // write / overwrite dataset
    h5io->dswrite( H, "hilbert" );
    // release
    h5io->close();
  • 以下はより小さい50x100の行列を、2つの50x100チャンクで最適化した100x100の圧縮空間に書き込む例である。行列はオフセットを用いてデータ空間の前半(0->50)と後半(50->100)に2回書き込まれる。
    // dual channel hilbert matrix
    cv::Mat H(50, 100, CV_64FC2);
    for(int i = 0; i < H.rows; i++)
    for(int j = 0; j < H.cols; j++)
    {
    H.at<cv::Vec2d>(i,j)[0] = 1./(i+j+1);
    H.at<cv::Vec2d>(i,j)[1] = -1./(i+j+1);
    count++;
    }
    // open / autocreate hdf5 file
    cv::Ptr<cv::hdf::HDF5> h5io = cv::hdf::open( "mytest.h5" );
    // optimise dataset by two chunks
    int chunks[2] = { 50, 100 };
    // create 100x100 CV_64FC2 compressed space
    h5io->dscreate( 100, 100, CV_64FC2, "hilbert", 9, chunks );
    // write into first half
    int offset1[2] = { 0, 0 };
    h5io->dswrite( H, "hilbert", offset1 );
    // write into second half
    int offset2[2] = { 50, 0 };
    h5io->dswrite( H, "hilbert", offset2 );
    // release
    h5io->close();

◆ dswrite() [4/4]

virtual void cv::hdf::HDF5::dswrite ( InputArray Array,
const String & dslabel,
const vector< int > & dims_offset,
const vector< int > & dims_counts = vector< int >() ) const
pure virtual

◆ grcreate()

virtual void cv::hdf::HDF5::grcreate ( const String & grlabel)
pure virtual

グループを作成する。

引数
grlabelhdf5 グループのラベルを指定する。

デフォルトのプロパティでhdf5グループを作成する。グループは作成後に自動的にクローズされる。

覚え書き
グループは複数のデータセットをより適切に整理するのに役立つ。任意のグループ内にサブグループを作成できる。特定のグループの存在は hlexists() を用いて確認できる。サブグループの場合、ラベルは例えば 'Group1/SubGroup1' のようになり、ここで SubGroup1 はルートグループ Group1 内にある。サブグループを作成する前に、その親グループを必ず作成しておく必要がある。
  • この例では、Group1 が SubGroup1 という1つのサブグループを持つ:

    Ptr<hdf::HDF5> h5io = hdf::open("mytest.h5");
    // "/" means the root group, which is always present
    if (!h5io->hlexists("/Group1"))
    h5io->grcreate("/Group1");
    else
    std::cout << "/Group1 has already been created, skip it.\n";
    // Note that Group1 has been created above, otherwise exception will occur
    if (!h5io->hlexists("/Group1/SubGroup1"))
    h5io->grcreate("/Group1/SubGroup1");
    else
    std::cout << "/Group1/SubGroup1 has already been created, skip it.\n";
    h5io->close();

    HDFViewツールを使って可視化した対応する結果は次のとおりである

Visualization of groups using the HDFView tool
覚え書き
データセットを dscreate()kpcreate() で作成する際、ラベル内にフルパスを指定することでグループ内に作成できる。この例では、'Group1/SubGroup1/MyDataSet' となる。スレッドセーフではない。

◆ hlexists()

virtual bool cv::hdf::HDF5::hlexists ( const String & label) const
pure virtual

ラベルが存在するかどうかを確認する。

引数
labelhdf5 データセットのラベルを指定する。

データセットが存在する場合はtrueを、そうでない場合はfalseを返す。

覚え書き
ラベル名の下にデータセット、グループ、またはその他のオブジェクト型(hdf5リンク)が存在するかどうかを確認する。スレッドセーフである。

◆ kpcreate()

virtual void cv::hdf::HDF5::kpcreate ( const int size,
const String & kplabel,
const int compresslevel = H5_NONE,
const int chunks = H5_NONE ) const
pure virtual

cv::KeyPoint データセット用の専用ストレージを作成し割り当てる。

引数
sizeKeyPoint の固定数を宣言する
kplabelhdf5 データセットのラベルを指定する。同じラベルの既存データセットがあれば上書きされる。
compresslevel使用する圧縮レベル 0-9 を指定する。H5_NONE がデフォルトで、圧縮なしを意味する。
chunksブロック I/O に使用するチャンクサイズを各配列要素で指定する。H5_NONE がデフォルトで、圧縮なしを意味する。
覚え書き
データセットが既に存在する場合は例外がスローされる。データセットの存在は hlexists() を用いて確認できる。
  • データセットに100個のキーポイント用の領域を作成する以下の例を参照:
    // open hdf5 file
    cv::Ptr<cv::hdf::HDF5> h5io = cv::hdf::open( "mytest.h5" );
    if ( ! h5io->hlexists( "keypoints" ) )
    h5io->kpcreate( 100, "keypoints" );
    else
    printf("DS already created, skipping\n" );
覚え書き
size に H5_UNLIMITED を指定すると、キーポイント数が無制限であることを意味し、追加や挿入によっていつでもそのようなデータセットを拡張できる。H5_UNLIMITED の存在はカスタムチャンキングの定義を必要とする。無制限のシナリオではデフォルトのチャンキングは定義されない。なぜならその次元のデフォルトサイズはゼロであり、データセットへの書き込みに応じて拡張されるためである。一部の次元に H5_UNLIMITED を持つデータセットへ書き込むには、無制限の次元での拡張を可能にする kpinsert() が必要であり、あらかじめ定義されたデータ空間にのみ書き込める kpwrite() は使用できない。

◆ kpgetsize()

virtual int cv::hdf::HDF5::kpgetsize ( const String & kplabel,
int dims_flag = HDF5::H5_GETDIMS ) const
pure virtual

キーポイントデータセットのサイズを取得する。

引数
kplabel測定対象の hdf5 データセットのラベルを指定する。
dims_flagH5_GETDIMS ではデータセットの次元を取得し、H5_GETMAXDIMS ではデータセットの最大次元を取得する。

キーポイントデータセットのサイズを返す。

覚え書き
結果のサイズはキーポイントの数に一致する。デフォルトでは H5_GETDIMS が実際のデータセットの次元を返す。H5_GETMAXDIM フラグを使用すると、許容される最大次元を取得する。これは通常実際のデータセットの次元に一致するが、データセットが無制限モードで準備されていた場合は H5_UNLIMITED 値を保持することがある。これは、データセット全体または一部を上書きする前に既存のデータセットの次元を確認するのに役立つ。サイズ超過のソースデータをデータセット対象に書き込もうとすると例外がスローされる。H5_GETCHUNKDIMS は、データセットがチャンキングオプション付きで作成されていた場合はチャンクの次元を返し、そうでない場合は返されるベクトルのサイズはゼロになる。

◆ kpinsert()

virtual void cv::hdf::HDF5::kpinsert ( const vector< KeyPoint > keypoints,
const String & kplabel,
const int offset = H5_NONE,
const int counts = H5_NONE ) const
pure virtual

KeyPoint のリストを指定したデータセットに挿入または上書きし、無制限プロパティが許す場合はデータセットのサイズを自動拡張する。

引数
keypoints書き込むキーポイントデータのリストを指定する。
kplabel書き込み先となる hdf5 データセットのラベルを指定する。
offsetデータセット上でキーポイントを(上書き)書き込む先のオフセット位置を指定する。
countsデータセットに書き込むキーポイントの数を指定する。

vector<KeyPoint> オブジェクトを対象のデータセットに書き込み、許可されている場合はデータセットの次元を自動拡張する。

覚え書き
kpwrite() とは異なり、データセットは自動的に作成されないdsinsert() がデータセットの外側の領域に対して行われ、かつデータセットが無制限モードで作成されている場合はデータセットが拡張され、そうでない場合は例外がスローされる。無制限プロパティでデータセットを作成するには、kpcreate() と作成時のオプションである H5_UNLIMITED フラグを参照。同一のデータセットに対してはスレッドセーフではないが、複数のデータセットを単一のhdf5ファイル内に統合できる。
  • 以下の例はキーポイント保存用の無制限空間を作成し、10個のキーポイントのリストをその空間に10回挿入する。最終的なデータセットは100個のキーポイントを持つ。チャンクサイズは10で、キーポイントのリストに対して最適化されている。ルーチンが複数回呼ばれた場合、データセットは単に上書きされる:
    // generate 10 dummy keypoints
    std::vector<cv::KeyPoint> keypoints;
    for(int i = 0; i < 10; i++)
    keypoints.push_back( cv::KeyPoint(i, -i, 1, -1, 0, 0, -1) );
    // open / autocreate hdf5 file
    cv::Ptr<cv::hdf::HDF5> h5io = cv::hdf::open( "mytest.h5" );
    // create unlimited size space with chunk size of 10
    h5io->kpcreate( cv::hdf::HDF5::H5_UNLIMITED, "keypoints", -1, 10 );
    // insert 10 times same 10 keypoints
    for(int i = 0; i < 10; i++)
    h5io->kpinsert( keypoints, "keypoints", i * 10 );
    // release
    h5io->close();
    Data structure for salient point detectors.
    Definition types.hpp:755

◆ kpread()

virtual void cv::hdf::HDF5::kpread ( vector< KeyPoint > & keypoints,
const String & kplabel,
const int offset = H5_NONE,
const int counts = H5_NONE ) const
pure virtual

hdf5ファイルから特定のキーポイントデータセットを vector<KeyPoint> オブジェクトとして読み込む。

引数
keypoints読み込んだデータが返される vector<KeyPoint> コンテナ。
kplabel読み込み元となる hdf5 データセットのラベルを指定する。
offsetデータセット上で読み込みを開始するオフセット位置を指定する。
countsデータセットから読み込むキーポイントの数を指定する。

格納されたデータセットを反映した vector<KeyPoint> オブジェクトを読み出す。

覚え書き
hdf5ファイルが存在しない場合は例外がスローされる。データセットの有無を確認するには hlexists() を使用する。スレッドセーフである。
  • 以下は2番目のエントリから始まるキーポイントを含むデータセットを読み込む例である:
    // open hdf5 file
    cv::Ptr<cv::hdf::HDF5> h5io = cv::hdf::open( "mytest.h5" );
    // blank KeyPoint container
    std::vector<cv::KeyPoint> keypoints;
    // read keypoints starting second one
    h5io->kpread( keypoints, "keypoints", 1 );
    // release
    h5io->close();
  • 以下は2番目のエントリから3個のキーポイントを読み込む例である。
    // open hdf5 file
    cv::Ptr<cv::hdf::HDF5> h5io = cv::hdf::open( "mytest.h5" );
    // blank KeyPoint container
    std::vector<cv::KeyPoint> keypoints;
    // read three keypoints starting second one
    h5io->kpread( keypoints, "keypoints", 1, 3 );
    // release
    h5io->close();

◆ kpwrite()

virtual void cv::hdf::HDF5::kpwrite ( const vector< KeyPoint > keypoints,
const String & kplabel,
const int offset = H5_NONE,
const int counts = H5_NONE ) const
pure virtual

KeyPoint のリストをhdf5ファイルの指定したデータセットに書き込む、または上書きする。

引数
keypoints書き込むキーポイントデータのリストを指定する。
kplabel書き込み先となる hdf5 データセットのラベルを指定する。
offsetデータセット上でキーポイントを(上書き)書き込む先のオフセット位置を指定する。
countsデータセットに書き込むキーポイントの数を指定する。

vector<KeyPoint> オブジェクトを対象のデータセットに書き込む。

覚え書き
データセットが作成されておらず存在しない場合は自動的に作成される。スレッドセーフであるが、書き込みは互いに重複しない別々の領域に対して行うことを推奨する。1つのhdf5ファイル内に複数のデータセットを書き込める。
  • 以下は100個のキーポイントをデータセットに書き込む例である。データセットの事前作成は不要である。ルーチンを複数回呼び出した場合、データセットは単に上書きされる:
    // generate 100 dummy keypoints
    std::vector<cv::KeyPoint> keypoints;
    for(int i = 0; i < 100; i++)
    keypoints.push_back( cv::KeyPoint(i, -i, 1, -1, 0, 0, -1) );
    // open / autocreate hdf5 file
    cv::Ptr<cv::hdf::HDF5> h5io = cv::hdf::open( "mytest.h5" );
    // write / overwrite dataset
    h5io->kpwrite( keypoints, "keypoints" );
    // release
    h5io->close();
  • 以下の例では、50個のキーポイントというより小さいセットを使い、10チャンクで最適化した100個のキーポイント分の圧縮空間に書き込む。同じキーポイントセットを3回書き込み、まず前半(0->50)に、次に後半(50->75)に、そしてオフセットとカウントの引数を用いて書き込みアクセスのウィンドウを設定し、残りのスロット(75->99)にデータ空間として書き込む。ルーチンを複数回呼び出した場合、データセットは単に上書きされる:
    // generate 50 dummy keypoints
    std::vector<cv::KeyPoint> keypoints;
    for(int i = 0; i < 50; i++)
    keypoints.push_back( cv::KeyPoint(i, -i, 1, -1, 0, 0, -1) );
    // open / autocreate hdf5 file
    cv::Ptr<cv::hdf::HDF5> h5io = cv::hdf::open( "mytest.h5" );
    // create maximum compressed space of size 100 with chunk size 10
    h5io->kpcreate( 100, "keypoints", 9, 10 );
    // write into first half
    h5io->kpwrite( keypoints, "keypoints", 0 );
    // write first 25 keypoints into second half
    h5io->kpwrite( keypoints, "keypoints", 50, 25 );
    // write first 25 keypoints into remained space of second half
    h5io->kpwrite( keypoints, "keypoints", 75, 25 );
    // release
    h5io->close();

このクラス詳解は次のファイルから抽出されました: