OpenCV:为什么在分配新值后矩阵值没有变化?

时间:2012-10-07 10:21:36

标签: c++ opencv for-loop matrix set

在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”方法,但这对我来说太耗费时间了。让我说清楚“灰色”矩阵不是一个群体矩阵,它是从视频帧然后转换为灰度,我可以看到它。还有什么方法可以改变矩阵值,或者我在这里做错了什么?我希望我不会重复任何旧问题,因为我已经在网上搜索过这个问题,但仍然无法解决。

0 个答案:

没有答案