OpenCVの機械学習クラス(CvStatModelを継承した、CvSVMやCvDTree、CvBoostなど)は、学習時(train()関数)において、入力データのうちどれを実際に学習に使うかを指定することができる。
例えば二分木であれば
bool CvDTree::train(const CvMat* _train_data, int _tflag, const CvMat* _responses, const CvMat* _var_idx=0, const CvMat* _sample_idx=0, const CvMat* _var_type=0, const CvMat* _missing_mask=0, CvDTreeParams params=CvDTreeParams() );
という関数で、この_sample_idxが、そのマスクにあたる。
この_sample_idxはCV_8UC1型もしくはCV_32SC1型で、使い方は学習する要素を指定する_var_idxと同じ。詳しくは以下を参照
http://d.hatena.ne.jp/takmin/20090403/1238735401
で、ここで注意が必要。学習データにすべての要素を使いたい場合は、_sample_idxにCV_32SC1型を使用するか、もしくは0を指定すること。CV_8UC1型にして全ての要素を1にするとエラーが出ます。
こいつのおかげで何時間もはまりました。