0

ビデオフレームに次のコードを使用して、マトリックス値をある範囲で設定しています:

for ( int row = 0, i = 0; row < srcMat.rows; ++row, i ++ )
{
   uchar* p = medianMat.ptr ( row );
   for ( int col = 0, j = 0; col < srcMat.cols; ++ col, j ++ )
   {
     dstMat ( cv::Range::all(), cv::Range ( i * 5 +1, i * 5 + 4 )).setTo ( *p );
     data++;
   }
}

*p を dstMat の 3 つの連続する値にコピーし、それらの前後にゼロ スペースを 1 つ残す必要があります。つまり、私の dstMat がすべてゼロで、*p 値が「1,2,3」の場合、私の目標は dstMat を「01110 02220 03330」などのようにすることです。ここでの問題は、1 フレームに約 70 から 80 ミリ秒を使用することです。これは私の場合には遅すぎます。1 フレームにせいぜい 30 ミリ秒しかかかりません。これを行うためのより効率的な方法はありますか? さらに、「dstMat " 値は "for" ループの外ではすべてゼロです。何かアイデアはありますか?どうもありがとうございました。

4

1 に答える 1

2

みたいな

for ( int row = 0; row < dstMat.rows; ++row ){
   uchar* pMed = medianMat.ptr ( row );
   uchar* pDest = dstMat.ptr ( row );  // resulting image
   pDest++; // skip the first place '0'

   for ( int col = 0; col < dstMat.cols; col+=5 )    {
     // copy the value from median into the destination in 3 consecutive values
     *pDest++ = *pMed; // copy 1 to dest
     *pDest++ = *pMed; // copy 1 to dest
     *pDest++ = *pMed; // copy 1 to dest

     pDest+=2; // skip the two zeros
     pMed++; // move to the '2'
   }
}

cv::zeros を使用して、新しい cv::mat をゼロに初期化できます

于 2012-08-16T14:29:29.420 に答える