Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Opencv::Mat公差间隔_C++_Opencv_Matrix_Intervals - Fatal编程技术网

C++ Opencv::Mat公差间隔

C++ Opencv::Mat公差间隔,c++,opencv,matrix,intervals,C++,Opencv,Matrix,Intervals,是否有办法确定两个cv::Mat矩阵的元素彼此是否在可接受的公差范围内 i、 e.如果A=[A,b,c,d,e,f]和b=[A±5%,b±5%,c±5%,d±5%,e±5%,f±5%] 我认为compare()函数可能很有用,但我不确定如何实现它。OpenCV似乎没有任何内置函数可以做到这一点,我可以看到,但是如果它们公开迭代器,那么实现某些功能应该非常简单: template <typename T> bool within_tolerance(const cv::Mat&

是否有办法确定两个cv::Mat矩阵的元素彼此是否在可接受的公差范围内

i、 e.如果A=[A,b,c,d,e,f]和b=[A±5%,b±5%,c±5%,d±5%,e±5%,f±5%]


我认为compare()函数可能很有用,但我不确定如何实现它。

OpenCV似乎没有任何内置函数可以做到这一点,我可以看到,但是如果它们公开迭代器,那么实现某些功能应该非常简单:

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.begin<T>(), m1.end<T>(), m2.begin<T>(), compare);
}
模板
公差范围内的布尔值(常数cv::材料和m1,常数cv::材料和m2,常数T和公差)
{
自动比较=[](常量T&v1,常量T&v2)->bool
{return std::abs(v1-v2)

编辑:我没有认真考虑比较;以上仅适用于无符号值。这可以用类似于
v2>(1-公差)*v1和&v2<(1+公差)*v1
的东西来解决,我使用它达到了预期的效果:

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;
                }
            }
        }
cv::Mat上限,下限;
cv::Mat Baseplus;
cv::Mat Baseminus;
Baseplus=1.1*Base.clone();
Base减号=0.9*Base.clone();
比较(NewData、base减号、Lowerbound、CMP_GE);
比较(NewData、Baseplus、上限、CMP_LE);
如果(计数非零(下限)>0)
{
if(countNonZero(上限)>0)
{
如果((countNonZero(上界)+countNonZero(下界))>4)
{
库特