私はcv :: Matオブジェクトと他のコードを宣言したいと思います。次元(nrowsとncols)を変更してください。私はOpenCVのドキュメントでは何の方法も見つけられませんでした。彼らは常にコンストラクタにディメンションを含めることを提案します。cv :: Mat画像の寸法を動的に変更するには?
答えて
create()メソッドを使用するのが簡単でクリーンな方法です。あなたが好きなだけの時間を呼び出すことができ、そして偶然には作成するために送られたときには、画像バッファを再割り当てしますと、現在の画像パラメータが一致しない:
Mat frame;
for(int i=0;i<n;i++)
{
...
// if width[i], height[i] or type[i] are != to those on the i-1
// or the frame is empty(first loop)
// it allocates new memory
frame.create(width[i], height[i], type[i]);
...
// do some processing
}
イメージのサイズを変更する場合は、をチェックしてください。
は大きさで新しいMat dst
を作成したデータは、その後、あなたが欲しいタイプ:
cv::resize(src, dst, dst.size(), 0, 0, cv::INTER_CUBIC);
は、ドキュメントをチェックし、cv::INTER_CUBIC
以外の他の補間方法があります。
おかげでカールを使用していますが、私の問題は、私がしたいということですcv :: Matオブジェクトの型と次元を動的に定義します。 resize()は1つの解決策かもしれませんが、正確には私が探しているものではありません。 – Rasoul
さて、私は、その目的のために 'resize()'を使ったことがあります。 'src' Matのサイズを変更する必要があるときは、必要な次元とタイプの新しいMatを宣言し、' resize() 'を実行してデータを新しい次元に拡大するだけです。また、必要に応じて、元のMatに再寸法データをコピーするために 'src = dst.clone();'を実行することもできます。 – karlphillip
このように計算する変数Size
を定義するだけですか?
// dynamically compute size...
Size dynSize(0, 0);
dynSize.width = magicWidth();
dynSize.height = magicHeight();
int dynType = CV_8UC1;
// determine the type you want...
Mat dynMat(dynSize, dynType);
をあなたが最大サイズを知っているだけに必要がある場合総マットから行/ COLSのサブレンジを使用すると、関数のCV ::マット:: rowRangeおよび/またはCV ::マット:: colRange
http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-rowrange
元のイメージを破壊していませんか?私はあなたがサイズ変更を使用しなければならないと思った –
あなたは正しいですMat ::前のデータを参照解除するhttp://docs.opencv.org/modules/core/doc/basic_structures.html#mat-create Mat :: resize preserves STLベクタクラスと同じようにhttp://docs.opencv.org/modules/core/doc/basic_structures.html#mat-resize – gantzer89
私は説明するのが面倒なので、resize()はSTLとして動作しませんこの場合、ジョブはcreate()します。新しいサイズが元のサイズと一致しない場合のみ再割り当てされます。 – Sam