首先,我是新来的网站(但是我很长时间以来一直在阅读和发布信息: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);
的行它确实有效......
我真的无法弄清楚问题是什么......所以,如果有人可以提供帮助,那就太可爱了!:)
提前谢谢你,最好的问候。
答案 0 :(得分:2)
该断言是由于代码试图访问contorni
对象的无效索引(参见当前source code)中的第937行。我怀疑这最终是由于传递了无效的{{1}对象进入contorni
函数,也许是一个空向量。通常,我希望函数检查并拒绝无效输入,虽然我不太了解openCV知道它是否需要有效输入的函数(documentation没有提到它的一种方式。)
为了避免这个错误,我会明确地检查对convexHull()和/或findContours()的输入以确保它是有效的并且中止或做一些适当的事情(如果不是)。