更新
感谢所有的反馈。我是个白痴,因为答案非常耐心地指出:问题在于界面未正确更新的 mParams.amount 的值。我不知道为什么我没有明确检查或在调试器中注意到它。只是那些日子之一。
我提供整个函数的原因是因为我对为什么事情不工作感到完全困惑,并且担心迭代器周围可能存在某种上下文问题 - 但与上面一样,它只需要更多的常识。
原始问题
我正在尝试使用迭代器在四通道归一化浮点 cv::Mat 上实现对比度过滤器,如下所示:
void FilterDepthContrast::process(cv::Mat& data)
{
typedef cv::Vec<float, 4> V;
V mid = V(.5, .5, .5, .5);
for (auto v=data.begin<V>(); v!=data.end<V>(); ++v)
{
V distanceFromMiddle = *v - mid;
cout << "v before " << *v << endl;
*v = mid + mParams.amount * distanceFromMiddle;
cout << "added on " << (mParams.amount * distanceFromMiddle) << endl;
cout << "v after " << *v << endl;
}
}
但是,对 *v 的分配似乎不起作用。这是打印的内容:
v before (0.94902,0.960784,0.929412,0.211765)
added on (0.44902,0.460784,0.429412,-0.288235)
v after (0.94902,0.960784,0.929412,0.211765)
谁能解释我在这个迭代器上做错了什么以及如何解决它?