C++ 为什么我对cv::Mat迭代器的赋值不起作用? 更新
感谢所有的反馈。答案耐心地指出,我是个白痴:问题在于mParams.amount的值没有被接口正确更新。我不知道为什么我没有明确地检查这个问题,或者在调试器中没有注意到它。只是其中的一天 我提供整个函数的原因是,我完全不明白为什么事情不起作用,并且担心迭代器周围可能存在某种上下文问题,但与上面一样,它只需要多一点常识C++ 为什么我对cv::Mat迭代器的赋值不起作用? 更新,c++,opencv,iterator,C++,Opencv,Iterator,感谢所有的反馈。答案耐心地指出,我是个白痴:问题在于mParams.amount的值没有被接口正确更新。我不知道为什么我没有明确地检查这个问题,或者在调试器中没有注意到它。只是其中的一天 我提供整个函数的原因是,我完全不明白为什么事情不起作用,并且担心迭代器周围可能存在某种上下文问题,但与上面一样,它只需要多一点常识 原始问题 我试图使用迭代器在四通道标准化浮点cv::Mat上实现对比度过滤器,如下所示: void FilterDepthContrast::process(cv::Mat&am
原始问题 我试图使用迭代器在四通道标准化浮点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=(0.94902,0.960784,0.929412,0.211765)
和mid=(.5,5,5,5)
因此distancefrommide=V-mid=(0.44902,0.460784,0.429412,-0.288235)
但是cout的输出值是V=(0.94902,0.960784,0.929412,0.211765)
和mid=(.5,5,5,5)
因此distancefrommide=V-mid=(0.44902,0.460784,0.429412,-0.288235)
但是从cout输出的迭代器没有问题。
使用公式,您将在打印时得到结果
看看如何:
V mid = V(.5, .5, .5, .5);
打印首字母*v=0.94902,0.960784,0.929412,0.211765
申请
V distanceFromMiddle = *v - mid;
中间距离=(0.44902,0.460784,0.429412,-0.288235)
也如印刷品所示,
(mParams.amount*distance from middle)=(0.44902,0.460784,0.429412,-0.288235)
现在申请
*v = mid + mParams.amount * distanceFromMiddle;
(.5,5,5,5)+(0.44902,0.460784,0.429412,-0.288235)=(0.94902,0.960784,0.929412,0.211765)
我认为问题是因为mParams.amount=1。迭代器没有问题。
使用公式,您将在打印时得到结果
看看如何:
V mid = V(.5, .5, .5, .5);
打印首字母*v=0.94902,0.960784,0.929412,0.211765
申请
V distanceFromMiddle = *v - mid;
中间距离=(0.44902,0.460784,0.429412,-0.288235)
也如印刷品所示,
(mParams.amount*distance from middle)=(0.44902,0.460784,0.429412,-0.288235)
现在申请
*v = mid + mParams.amount * distanceFromMiddle;
(.5,5,5,5)+(0.44902,0.460784,0.429412,-0.288235)=(0.94902,0.960784,0.929412,0.211765)
我认为问题是因为mParams.amount=1。为什么不打印mid+mParams.amount*distance from middle代码>?如果mParams.amount
为1
,则您有*v=*v
。存在一些无关的代码。您不需要循环或函数来演示您的问题。创建一个简单的示例,一个。为什么不打印mid+mParams.amount*distance fromMiddle代码>?如果mParams.amount
为1
,则您有*v=*v
。存在一些无关的代码。您不需要循环或函数来演示您的问题。创建一个简单的例子,一个。是的,是的,非常明显。非常感谢。是的,是的,非常明显。非常感谢。谢谢,你们都完全正确-请看我对原始问题的评论谢谢,你们都完全正确-请看我对原始问题的评论