2013-08-13 35 views
15

これは非常に簡単な質問ですが、GoogleやOpenCVのドキュメントで答えを見つけることができませんでした。 cv::Matの下部にベクタ番号またはデフォルト番号の行を挿入するにはどうすればよいですか?私は試しました:OpenCVの行列に行を追加する

std::vector<double> v = {0, 0, 1}; 
m.push_back(v); 

私はアサーションエラーを常に得ます。それを行う正しい方法は何ですか?

+0

マットがどのように見えるか、を示してください。はい、この方法で行を挿入できますが、挿入する行は実際の行のように見える必要があります。 – berak

+0

マットは次のようになります:[8.4-312、2.1e-314、2.1e-314; 4294967296.0、-2.3e + 77,2.8e-269]。 'std :: vector'を使うのは本当に可能ですか? – Neptilo

答えて

32

追加要素はコンテナマトリクスと同数の列をもつMatでなければなりません:

cv::Mat m = cv::Mat::ones(4, 3, CV_64F); // 3 cols, 4 rows 
cv::Mat row = cv::Mat::ones(1, 3, CV_64F); // 3 cols 
m.push_back(row);       // 3 cols, 5 rows 
+0

ありがとうございます、それは動作します。しかし、私は「[Mat :: push_back'メソッド]が​​STLベクトルクラスの対応するメソッドをエミュレートする理由を疑問に思います。 – Neptilo

+0

これは、ベクトルの場合と同様に、行列の最後に要素を追加したり削除したり( 'pop_back')したり、これらの要素を(単一の値ではなく)並べ替えたりできるためです。 – ChronoTrigger

+0

これは単に 'cv :: Mat'がSTLベクトルと同種の機能を持ちますが、STLベクトルを引数として使用しないことを意味しています。 OpenCVのドキュメントは、もう少し明白なIMOでなければなりません。有難う御座います! – Neptilo