アップデート
すべてのフィードバックに感謝します。答えが非常に辛抱強く指摘しているように、私はばかでした.問題は、インターフェイスによって正しく更新されていない mParams.amount の値にあります。なぜこれを明示的にチェックしなかったのか、デバッガーで気付かなかったのかわかりません。そのうちの 1 日だけです。
関数全体を提供した理由は、なぜ物事が機能しないのかについて完全に当惑し、イテレータを取り巻く何らかの文脈上の問題があるのではないかと心配したためです.しかし、上記と同様に、もう少し常識が必要でした.
元の質問
次のようにイテレータを使用して、4 チャネルの正規化されたフロート 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)
このイテレータで私が間違っていることと、それを修正する方法を誰かが説明できますか?