OpenCV错误:断言失败,mat.cpp第537行

use*_*864 3 c++ opencv image-processing computer-vision

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];
        }
Run Code Online (Sandbox Code Playgroud)

怎么了?

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

Ale*_*son 6

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

正如您在问题中所写,失败的断言在Mat::at函数内部.

你必须在你的代码中找到Mat::at给你错误的调用(或调用).

正如您在OpenCV帮助页面上 看到的那样,Mat::at模板函数有一个,两个或三个参数,断言失败可能有多种原因:

  1. 您正在使用错误的模板参数(例如,参见在opencv中使用Mat :: at(i,j)获取2-D Mat对象)
  2. 参数是错误的,例如在调用中template<typename T> T& Mat::at(int i, int j),i应该介于两者之间0,行数减去一,j假定介于两者之间0,列数减去一.如果您有一个包含100行的图像,并且您要求第101行的元素,则断言将失败.在这种情况下,逐个错误很常见.

更具体地说,断言失败了,因为以下至少有一个boolfalse:

  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())

以上bools在Mat课堂范围内有意义.

此外,请注意帮助说:

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

所以在你的Release配置中,你不会有失败的断言,但可能在某个地方崩溃.

从您链接的源代码,在我看来,您在Windows上,如果这是真的,如果您有Visual Studio,我建议您从源代码构建OpenCV,在内部放置一个断点Mat::at,然后调试您的代码为了看看以前bool的是什么false.