【发布时间】:2016-05-17 00:54:19
【问题描述】:
我想通过子矩阵逐步改变我的矩阵。但是像素值没有变化。输出像素值与输入像素值相同。我的“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*变量指向新数据。相反,在wavenoise函数的结果上使用copyTo将值复制到子矩阵中。您需要记住,cv::Mat的行为类似于智能指针 - 赋值只会更改对象所指的内容,但不会导致数据的深层复制。
标签: c++ opencv image-processing computer-vision