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