C++ 调试断言失败OpenCv是\u块\u类型\u有效(标头->;\u块\u使用)
我不熟悉使用VisualStudio和openCv编程。我编写了一个简单的程序来显示图像的红色通道,但每次运行代码时,它都会抛出“调试断言失败”错误C++ 调试断言失败OpenCv是\u块\u类型\u有效(标头->;\u块\u使用),c++,opencv,visual-studio-2015,visual-studio-debugging,C++,Opencv,Visual Studio 2015,Visual Studio Debugging,我不熟悉使用VisualStudio和openCv编程。我编写了一个简单的程序来显示图像的红色通道,但每次运行代码时,它都会抛出“调试断言失败”错误 这对我来说很好。我正在使用visual studio-2013 这里您有一个与您类似的案例,可能会有所帮助: 您是否绝对确定图像已正确加载 我认为它没有正确加载,因此向量rgb为空,反过来,元素rgb[0]不存在,从而触发异常 我注意到了几件事: 对include语句使用斜杠(/),而不是反斜杠(\),即 不要假设image.data设置为NULL
这对我来说很好。我正在使用visual studio-2013 这里您有一个与您类似的案例,可能会有所帮助:
您是否绝对确定图像已正确加载 我认为它没有正确加载,因此向量
rgb
为空,反过来,元素rgb[0]
不存在,从而触发异常
我注意到了几件事:
/
),而不是反斜杠(\
),即
不要假设image.data
设置为NULL
或nullptr
为空图像。取而代之的是检查
if (!image.empty()) { ... }
cv::imshow(…)
之后,再调用cv::waitKey(/*延迟毫秒或0等待用户输入*/)
,参见中的注释while(1)代码>--这是故意的吗?您想要的可能是cv::waitKey(0)
(请参见3.)
rgb
已初始化为通道数,即
vector<Mat> rgb(image.channels());
split(image, rgb);
// ...
矢量rgb(image.channels());
分割(图像,rgb);
// ...
std::vector
的默认构造函数创建一个空向量cv::split()
期望调用者(即您)为输出分配数据。如果你不这样做,很可能会引发一场灾难我做了你说的所有更正。但现在,当我最后按一个键退出时,它显示调试断言失败。更新rgb对我来说很有效。你能告诉我这个错误到底是什么意思吗?再次更新了我的答案。这回答了你的问题吗?
#include <opencv2\core.hpp> // Bad!
#include <opencv2/core.hpp> // Good!
if (!image.data) { ... }
if (!image.empty()) { ... }
vector<Mat> rgb(image.channels());
split(image, rgb);
// ...