0

私は、OpenCVと組み合わせてQt GUIプログラムを作成し、人を追跡するアプリケーションを作成しています。OpenCVには、行列を入力および出力として受け取る多くの関数があります。たとえば、色変換の関数です。

cvtColor(inputArray src、outputArray dst、int code、int dstCn = 0);

MatはOpenCVのデフォルトのマトリックスクラスであり、frameというMatオブジェクトがあると仮定すると、次のような関数を実装してプロパティを変更します。

cvtColor(frame、frame、CV_RGB2HSV、0);

関数の入力および出力と同じ変数を使用することの欠点はありますか?または、最初にコピーを作成する必要がありますか?

または、すべての関数のドキュメントを調べる必要がありますか?

4

2 に答える 2

0

個人的な選択だと思います。ここにいくつかの個人的なサンプルがあります:

読み取り専用入力、出力への参照を取得し、入力を処理した後、それを出力にプッシュします。オプションのエラー結果がわかりやすい。

bool function(const type& input, type& output){
    output = input;
    return true;
}

読み取り専用入力を取得し、それを出力に割り当て、出力を変更して返します(C ++ 11移動最適化)。

type function(const type& input){
    type output = input;
    return output;
}
type output = function(input);

ここでは、引数としてオブジェクトの新しいコピーを強制し、それを使用して返すことができます(コピーを変更したくない場合は、C ++ 11が最適です)。参照:速度が欲しい、値を渡す

type function(type input){
    // modify input
    return input;
}
type output = function(input);
  1. 同じ引数で入力と出力。注意して使用してください。エラーを返すことができます。

    bool function(type&put){return true; }

それはあなたのデザインに依存します。エラーは必要ありませんか?...可動式のものを使用してください。エラーが必要ですか?...戻り値にアクセスできるようにするものを使用してください。または、既存の慣行に従うだけで、それぞれが次のようにパフォーマンスをどのように助けたり、ペナルティを課したりできるかを知ってください。

// this makes a pointless copy for the input (use const ref here)
bool function(type input, type& output){
    output = input;
    return true;
}

(正しい方法は)

bool function(const type& input, type& output){
    output = input;
    return true;
}

PS:独学のC++開発者の個人的な意見:)

于 2013-03-14T18:50:23.850 に答える
0

これは個人的な選択です。後で入力画像が必要ない場合は、必ずそれを行ってください。私はすでに実際に試してみましたが、ほとんどの場合は機能しますが、うまく機能しない場合もあります。使用している機能によって異なります。

于 2013-04-03T08:26:26.110 に答える