断言失败&lt; 0&lt; = i&amp;&amp;我&lt; <int>的vv.size&LT;&GT;&GT;在未知函数中,文件src \ matrix.cpp,第912行</int>

时间:2012-04-02 15:32:10

标签: c++

首先,我是新来的网站(但是我很长时间以来一直在阅读和发布信息:D)很抱歉,如果我在构建问题时会犯一些错误...而且大多数重要的是,我是编程的新手(好吧不是新的,但我6个月前开始).. 无论如何,这是代码(感兴趣的部分):

extern DWORD miothread3 (LPDWORD lpdwParam)
{

Mat epsilon(dest);
Mat finale;
Mat *super;
int ratio = 3;
int lowThreshold;
int kernel_size = 3;
int i = 0;
CvConvexityDefect convessione;
vector<vector<Point> > contorni;
vector<Vec4i> gerarchia;
Mat hull;

while(1)
{
    Canny(epsilon, finale, lowThreshold, lowThreshold*ratio, kernel_size );
    findContours(finale, contorni, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);
    convexHull(contorni, hull);
}
return 0;
}

当我运行它时,我得到标题中的断言(“未知函数中的断言失败<0 <= i && i < <int>vv.size<>>,文件src \ matrix.cpp,第912行”)如果我评论convexHull(contorni, hull);的行它确实有效...... 我真的无法弄清楚问题是什么......所以,如果有人可以提供帮助,那就太可爱了!:)

提前谢谢你,最好的问候。

1 个答案:

答案 0 :(得分:2)

该断言是由于代码试图访问contorni对象的无效索引(参见当前source code)中的第937行。我怀疑这最终是由于传递了无效的{{1}对象进入contorni函数,也许是一个空向量。通常,我希望函数检查并拒绝无效输入,虽然我不太了解openCV知道它是否需要有效输入的函数(documentation没有提到它的一种方式。)

为了避免这个错误,我会明确地检查对convexHull()和/或findContours()的输入以确保它是有效的并且中止或做一些适当的事情(如果不是)。