我是C ++的新手,我对如何阅读和解释控制台上显示的c ++错误消息并不了解。当我在OpenCV中播放一些图像时,以下是一条错误消息。我知道这应该是与Mat文件的索引和Mat矩阵数据结构的维度相关的错误。但我想学习如何逐位读取错误消息。
OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (un
signed)size.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1
]*channels()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) &
((1 << 3) - 1))*4) & 15) == elemSize1()) in cv::Mat::at, file e:\opencv\build\i
nclude\opencv2\core\mat.hpp, line 538
答案 0 :(得分:1)
通常它是对输入或函数调用的测试,传递错误,不寻常和致命的错误。如果测试通过,程序就会存在。如果测试失败,它将以残酷且非常明显的方式死亡,以确保错误得到修复。
标准修复是:
使用调试器确定断言的函数。
阅读声明的函数的文档,并确保传入正确的数据并在调用断言函数之前进行了正确的调用以配置系统。
继续分解。
(dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3) - 1))*4) & 15) == elemSize1())
这是失败的布尔逻辑。它是特定于实现的。具体来说,这是一组5个测试,所有测试都必须通过或程序终止。
dims <= 2
Dims小于或等于2
data
数据不为零。可能是空指针测试。
(unsigned)i0 < (unsigned)size.p[0]
i0,无论是什么,都小于size.p [0],不管是什么。
(unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels())
关闭频道的数量小于其他频道的数量。
((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3) - 1))*4) & 15) == elemSize1()
这让我觉得某事的位深必须是正确的。没有上下文,我无法确定。
其余的
in cv::Mat::at, file e:\opencv\build\include\opencv2\core\mat.hpp, line 538
只是行号和发生断言的文件。