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