如错误消息所述,您有一个失败的OpenCV运行时断言。
正如您在问题中所写的那样,失败的断言位于Mat::at
函数内部。
您必须在代码中找到对Mat::at
的调用(或多个调用) Mat::at
这会给您带来错误。
如您在OpenCV帮助页面上所见, Mat::at
是带有一个,两个或三个参数的模板函数,断言失败可能有多种原因:
- 您使用了错误的模板参数(例如,对于2D Mat对象,请参见在opencv中使用Mat :: at(i,j) )
- 参数是错误的,例如在对
template<typename T> T& Mat::at(int i, int j)
的调用中,i
应该在0
到行数减一之间,而j
应该在之间0
,列数减一。如果您有一个包含100行的图像,并且在第101行请求一个元素,则断言将失败。在这种情况下,经常出现一对一的错误 。
更具体地说,断言失败,因为以下bool
至少之一为false
:
-
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())
上面的bool
在Mat
类的范围内是有意义的。
此外,请注意帮助说明:
为了获得更高的性能,仅在Debug配置中执行索引范围检查
因此,在您的Release配置中,您不会有失败的断言,而可能是某处崩溃。
从链接的源代码看,我看来您在Windows上,如果是这样,并且如果您具有Visual Studio,则建议您从源代码构建OpenCV,在Mat::at
内放置一个断点,然后转到调试您的代码,以查看先前的bool
是什么false
。
0
http://pastebin.com/5ZeMvm2C是我的项目中的头文件。
在第249行有skeleton.at(yaxis,xaxis + 1)。当我在项目中键入此代码时,出现此错误:
怎么了?
http://pastebin.com/gqJ5RpBU也是我的.cpp文件。