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