0

次の値を持つ 7x5 マトリックス (16 ビット イメージ) があり、IPP を使用して 3 番目ごとの値を新しい 3x2 マトリックスにコピーしたいとします。

ここに画像の説明を入力 => ここに画像の説明を入力.

関数を試しましたippiCopySubpix_16u_C1Rが、元のマトリックスの左隅のみがコピーされます。私にはどの可能性がありますか?ここに私のテストコードがあります:

    Ipp16u x[7*5], y[3*2];
    IppiSize roiOrig = {7,5}; IppiSize roiDst = {3,2}; 
    auto * ptr = x; // fill the matrix
    for (int i = 0; i < 7*5; i++)
    {
      *ptr++ = i;
    }

    ippiCopySubpix_16u_C1R(x, 7*2, y, 3*2, roiDst, 3, 3); 
    // result is [0 1 2 7 8 9]
4

1 に答える 1

0

ippiCopySubpix_16u_C1R は、この仕事に適した関数ではないと思います。
参照: http://technion.ac.il/doc/intel/ipp/ipp_manual/IPPI/ippi_ch4/functn_CopySubpix.htm

この関数は、次の式に従って、線形補間 (付録 B の線形補間を参照) を使用して宛先イメージのピクセル値を計算します。

ここに画像の説明を入力

ここで、i = 0、... roiSize.height - 1、j = 0、... roiSize.width - 1 です。

ご覧のとおり、dx と dy はスキップするピクセルの距離ではなく、サブピクセルのオフセット値です。

あなたが探している機能は次のとおりだと思います:ippiCopy_16u_C3C1R
参照: https://software.intel.com/en-us/node/503752

関数は、3 つおきのソース ピクセルを水平方向にスキップします。

垂直スキップの場合、srcStepサイズ (バイト単位) を 3 行に設定します。

于 2016-07-12T21:26:42.067 に答える