OpenCV错误:断言失败,mat.cpp行537
c++
computer-vision
image-processing
opencv
8
0

http://pastebin.com/5ZeMvm2C是我的项目中的头文件。

在第249行有skeleton.at(yaxis,xaxis + 1)。当我在项目中键入此代码时,出现此错误:

**OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)si
ze.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channel
s()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3
) - 1))*4) & 15) == elemSize1()) in unknown function, file c:\opencv\build\inclu
de\opencv2\core\mat.hpp, line 537**

// mat.cpp line 537 is:
    template<typename _Tp> inline _Tp& Mat::at(int i0, int i1)
        {
            CV_DbgAssert( dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] &&
                (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) &&
                CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1());
            return ((_Tp*)(data + step.p[0]*i0))[i1];
        }

怎么了?

http://pastebin.com/gqJ5RpBU也是我的.cpp文件。

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

如错误消息所述,您有一个失败的OpenCV运行时断言。

正如您在问题中所写的那样,失败的断言位于Mat::at函数内部。

您必须在代码中找到对Mat::at的调用(或多个调用) Mat::at这会给您带来错误。

如您在OpenCV帮助页面上所见, Mat::at是带有一个,两个或三个参数的模板函数,断言失败可能有多种原因:

  1. 您使用了错误的模板参数(例如,对于2D Mat对象,请参见在opencv中使用Mat :: at(i,j)
  2. 参数是错误的,例如在对template<typename T> T& Mat::at(int i, int j)的调用中, i应该在0到行数减一之间,而j应该在之间0 ,列数减一。如果您有一个包含100行的图像,并且在第101行请求一个元素,则断言将失败。在这种情况下,经常出现一对一的错误

更具体地说,断言失败,因为以下bool至少之一为false

  1. dims <= 2
  2. data
  3. (unsigned)i0 < (unsigned)size.p[0]
  4. (unsigned)(i1 * DataType<_Tp>::channels) < (unsigned)(size.p[1] * channels())
  5. CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1())

上面的boolMat类的范围内是有意义的。

此外,请注意帮助说明:

为了获得更高的性能,仅在Debug配置中执行索引范围检查

因此,在您的Release配置中,您不会有失败的断言,而可能是某处崩溃。

从链接的源代码看,我看来您在Windows上,如果是这样,并且如果您具有Visual Studio,则建议您从源代码构建OpenCV,在Mat::at内放置一个断点,然后转到调试您的代码,以查看先前的bool是什么false

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号