【问题标题】:OpenCV matrix element-wise division gives all-zero resultOpenCV矩阵元素除法给出全零结果
【发布时间】:2021-08-24 03:32:32
【问题描述】:

我在 iOS C++ 代码上使用 cocoapod 的 OpenCV。运行我的应用程序时,我发现它运行异常。最后,经过深挖,可以给出如下可重现的样本:

    {
        Mat a = (Mat_<uchar>({10, 20, 30, 40, 50, 60, 70, 80})).reshape(1, 1);
        Mat b = (Mat_<uchar>({4, 5, 6, 7, 8, 9, 10, 11})).reshape(1, 1);
        Mat c;
        divide(a, b, c);
        std::cout << "hello naive " << "a=" << a << endl << "b=" << b << endl << "a/b=" << (a / b) << "c=" << c << endl;
    }
    {
        Mat a = (Mat_<uchar>({10, 20, 30, 40, 50, 60, 70})).reshape(1, 1);
        Mat b = (Mat_<uchar>({4, 5, 6, 7, 8, 9, 10})).reshape(1, 1);
        Mat c;
        divide(a, b, c);
        std::cout << "hello naive " << "a=" << a << endl << "b=" << b << endl << "a/b=" << (a / b) << "c=" << c << endl;
    }

结果:

im_sta[a]: {size=1 x 8, type=0, empty=0, min=10.000000, max=80.000000, miu=[45], sigma=[22.9]}
im_sta[b]: {size=1 x 8, type=0, empty=0, min=4.000000, max=11.000000, miu=[7.5], sigma=[2.29]}
im_sta[a / b]: {size=1 x 8, type=0, empty=0, min=0.000000, max=0.000000, miu=[0], sigma=[0]}
hello naive a=[ 10,  20,  30,  40,  50,  60,  70,  80]
b=[  4,   5,   6,   7,   8,   9,  10,  11]
a/b=[  0,   0,   0,   0,   0,   0,   0,   0]c=[  0,   0,   0,   0,   0,   0,   0,   0]
im_sta[a]: {size=1 x 7, type=0, empty=0, min=10.000000, max=70.000000, miu=[40], sigma=[20]}
im_sta[b]: {size=1 x 7, type=0, empty=0, min=4.000000, max=10.000000, miu=[7], sigma=[2]}
im_sta[a / b]: {size=1 x 7, type=0, empty=0, min=2.000000, max=7.000000, miu=[5.29], sigma=[1.67]}
hello naive a=[ 10,  20,  30,  40,  50,  60,  70]
b=[  4,   5,   6,   7,   8,   9,  10]
a/b=[  2,   4,   5,   6,   6,   7,   7]c=[  2,   4,   5,   6,   6,   7,   7]

(其中 im_sta 是我打印的一些额外统计信息以获取更多详细信息,您也可以忽略它)。

如您所见,在某些情况下(似乎当 >=8 个元素时),该除法会导致全零!

我该如何解决?谢谢!

【问题讨论】:

    标签: c++ opencv computer-vision


    【解决方案1】:

    我稍后会找到答案。因此,我将其作为自我 QA 发布在这里,以帮助与我有同样问题的人。

    解决方案:将 OpenCV 从 4.1 升级到 4.3!那么就OK了!

    实际上,如下图所示,OpenCV >=4.2.0 仅在 3 个月前作为 cocoapod 提供(即使现在它已经是 4.5.0)......所以这是一个全新的修复,如果你不想自己从源代码编译opencv...(当我开始我的项目时(当然是3个月前之前)只有4.1.0)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-10
      相关资源
      最近更新 更多