2012-01-12 33 views
9

メソッドMat::resizeがあります。行列にデフォルト値の行をいくつでも追加できます。そうでない場合は、これを行う最も効率的な方法は何ですか。 ありがとうOpenCV OpenCV 2以降では、行列に列を追加する

+0

私は、オンラインドキュメントに見ていたし、あなたが列を追加するための機能を持っていないようです。 http://opencv.willowgarage.com/documentation/cpp/core_basic_structures.html?highlight=mat#Mat::resize –

答えて

25

使用cv::hconcat

Mat mat; 
Mat cols; 

cv::hconcat(mat, cols, mat); 
+4

この機能のためにドキュメントを見つけようとしないでください。それは文書化されていない。 –

+1

ヘッダーコードはこちらです:https://github.com/Itseez/opencv/blob/master/modules/core/include/opencv2/core.hpp#L968完全性を期すため、垂直連結は 'vconcat()'と 'cv :: Mat :: push_back()' –

+0

で行うことができます。ドキュメント:http://docs.opencv.org/trunk/d2/de8/group__core__array.html –

3

最悪のシナリオ:rotate the image by 90 degreesを使用してMat::resize()を使用すると、列が行になります。

+0

これは最悪のケースです.MatにCV_64FC1が含まれていて、サイズが大きすぎる場合(500 * 500)、私は行列の数が多いため、これを行う必要があります。そのため、このような大きな行列をアルゴリズムに2回回転または転置するプロセスは含めたくありません。 – AMCoded

+5

私が言ったように、**最悪の場合**。私が最高の場合を知っていたら、私はそれをあなたと共有していたでしょう。 – karlphillip

2

OpenCVは行列の要素を次々と順次格納していますが、列のサイズを大きくする直接的な方法はありませんが、上記の問題に対して2つの解決方法があります。 まず、次のメソッドを使用します他のメソッドよりも少ない)、行列の最後に特別な行や列を挿入したくない場合も同様の方法を使用できます。

void resizeCol(Mat& m, size_t sz, const Scalar& s) 
{ 
    Mat tm(m.rows, m.cols + sz, m.type()); 
    tm.setTo(s); 
    m.copyTo(tm(Rect(Point(0, 0), m.size()))); 
    m = tm; 
} 

そしてもう一つ、あなたのアルゴリズムへのデータの順序をコピーしても含まれていないと主張している場合、行と列の大多数であなたのマトリックスを作成し、小さな部分行列でアルゴリズムを開始することをお勧めしますマトリックスサイズをMat::adjustROIメソッドで増やしてください。

関連する問題