是否有一種方法來查找兩個cv :: Mat矩陣的元素是否在彼此的可接受範圍內?如果A = [a,b,c,d,e,f]和B = [a±5%,b±5%,c±5%,d±5%,e±5% ,f±5%]Opencv cv ::墊公差間隔
我在想比較()函數可能會有用,但我不確定如何實現它。
是否有一種方法來查找兩個cv :: Mat矩陣的元素是否在彼此的可接受範圍內?如果A = [a,b,c,d,e,f]和B = [a±5%,b±5%,c±5%,d±5%,e±5% ,f±5%]Opencv cv ::墊公差間隔
我在想比較()函數可能會有用,但我不確定如何實現它。
我用這個,爲了所需的效果:
cv::Mat Upperbound, Lowerbound;
cv::Mat Baseplus;
cv::Mat Baseminus;
Baseplus = 1.1*Base.clone();
Baseminus = 0.9*Base.clone();
compare(NewData, Baseminus, Lowerbound, CMP_GE);
compare(NewData, Baseplus, Upperbound, CMP_LE);
if (countNonZero(Lowerbound)>0)
{
if (countNonZero(Upperbound)>0)
{
if ((countNonZero(Upperbound)+countNonZero(Lowerbound))>4)
{
cout<<"Eye contact occurs in this frame"<<endl;
}
}
}
OpenCV的似乎並不具有可以做到這一點,我可以看到任何inbuilts,但敲東西了應該給予他們揭露迭代器是非常簡單的:
template <typename T>
bool within_tolerance(const cv::Mat& m1, const cv::Mat& m2, const T& tolerance)
{
auto compare = [](const T& v1, const T& v2) -> bool
{ return std::abs(v1 - v2) < tolerance * v1; };
return std::equal(m1<T>.begin(), m1<T>.end(), m2<T>.begin(), compare);
}
編輯:我不認爲硬足以說明比較;以上僅適用於無符號值。這可以用像v2 > (1 - tolerance) * v1 && v2 < (1 + tolerance) * v1
這樣的東西來解決。