我希望通过逐步使用子矩阵来更改我的矩阵。但是像素值没有改变。输出像素值与输入像素值相同。另外,我的"wavenoise"函数也可以正常工作。
以下是我的代码:
cv::Mat wave_trans = Mat::zeros(nr, nc, CV_64FC1);
for (int i = 0; i < L; i++){
Range Hhigh = Range(nc / 2, nc-1);
Range Hlow = Range(0, nc / 2 - 1);
Range Vhigh = Range(nr / 2, nr-1);
Range Vlow = Range(0, nr / 2 - 1);
Mat wave_trans_temp1 = Mat(wave_trans, Vlow, Hhigh);
wave_trans_temp1 = wavenoise(wave_trans_temp1, NoiseVar);
Mat wave_trans_temp2 = Mat(wave_trans, Vhigh, Hlow);
wave_trans_temp2 = wavenoise(wave_trans_temp2, NoiseVar);
Mat wave_trans_temp3 = Mat(wave_trans, Vhigh, Hhigh);
wave_trans_temp3 = wavenoise(wave_trans_temp3, NoiseVar);
nc = nc / 2;
nr = nr / 2;
}
wavenoise
函数中,它重新分配了矩阵(最好展示一下)。然后你将结果赋值给wave_trans_temp*
变量,指向新数据。相反,使用copyTo
函数将wavenoise
函数的结果复制到子矩阵中。需要记住的是,cv::Mat
的行为类似于智能指针--赋值只是改变对象所引用的内容,但不会深度复制数据。 - Dan Mašek