0

openCV では、次のようにマトリックス値を設定しようとしています。

int C = 3; 
cv::Mat reshapedGray = gray.reshape ( 0, 1 ); // reshaping gray matrix into 1x1 size
cv::Mat diff = cv::Mat::zeros ( C, height*width, CV_8UC3 );
cv::Mat mean = cv::Mat::zeros ( C, height*width, CV_8UC3 );
mean.setTo (125);

for ( int i=0; i < C; ++i)
{
    for ( int j = 0; j < height*width; ++j)
    {
        diff.data[diff.cols*i+j] = reshapedGray.data[j] - mean.data[mean.cols*i+j];
        //update mean matrix here
    }
}

何らかの理由で、最後に diff の値が変化していないことがわかりましたが、まだすべてゼロですが、 for ループでこの行を使用しようとしたとき:

std::cout << diff.data[diff.cols*i+j] << std::endl;

正しい値を出力しました。また、次のようなポインターを使用しようとしました。

double* diffPtr = diff.ptr<double>();
double* meanPtr = mean.ptr<double>();
double* rgPtr = reshapedGray.ptr<double>();

for ( int i = 0; i < C; ++i )
{
    for ( int j = 0; j < height*width; ++j)
    {
        *diffPtr = *rgPtr - *meanPtr;
        rgPtr++;
        meanPtr++;
        diffPtr++;
        //update mean matrix here
    }
}

それはまだ私にすべてのゼロ値を与えました、行さえも

std::cout << *diffPtr << std::endl;

ループ内で違いはありませんでした。cvMat の「set」メソッドを使いたかったのですが、時間がかかりすぎます。「グレー」マトリックスは空のマトリックスではないことを明確にさせてください。それはビデオフレームからのものであり、その後グレースケールに変換されます。それを見ることができます。マトリックス値を変更するために他にどのような方法が必要ですか、またはここで何が間違っていますか? これについてはすでにウェブで検索しましたが、まだ解決できなかったので、古い質問を繰り返さないことを願っています。

4

0 に答える 0