c++ - Opencv cv::垫公差区间

标签 c++ opencv matrix intervals

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

即如果 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);
}

编辑:我对比较没有认真考虑;以上仅适用于无符号值。这可以用类似 v2 > (1 - tolerance) * v1 && v2 < (1 + tolerance) * v1 的东西来修复.

关于c++ - Opencv cv::垫公差区间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13909044/

相关文章:

c++ - mysql 超时 - C/C++

python - 由于 qt,OpenCV cv2.imshow 无法正常工作

c - 从 double 组中删除一列

c++ - 计算第 n 个加泰罗尼亚数

C++ shared_ptr 释放所有权

android - 如何在 opencv C++ 中将图像设为黑白?

python - 可以使用 python 将两个单独的矩阵划分并保存在数据框中吗?

matlab - 如何为矩阵的每个元素设置不同的显示样式?

c++ - 如何在 C++ Qt 中填充静态 QMap 的值?

c++ - 在交互式地板项目上将顶 View 人体检测与地板投影相匹配