C++ 开cv查找凸壳
OpenCV中的以下代码用于检测黄色球体并绘制其凸面外壳。该代码虽然没有给出任何编译错误,但在输出窗口中给出了以下错误。 我使用最大面积函数来避免较小的不需要的轮廓。 错误是 断言失败(maxarea) { 最大面积=a; lrgctridx=i; } } //凸面外壳 向量壳(Contours.size()); 对于(int i=0;iC++ 开cv查找凸壳,c++,opencv,C++,Opencv,OpenCV中的以下代码用于检测黄色球体并绘制其凸面外壳。该代码虽然没有给出任何编译错误,但在输出窗口中给出了以下错误。 我使用最大面积函数来避免较小的不需要的轮廓。 错误是 断言失败(maxarea) { 最大面积=a; lrgctridx=i; } } //凸面外壳 向量壳(Contours.size()); 对于(int i=0;i
任何帮助都将不胜感激。提前感谢 您应该在每次迭代时重置
lrgctridx
假设您在时间“t”找到一个countour,并将lrgctridx设置为1代码>。在时间“t+1”时,您找不到任何轮廓,因此轮廓
和船体
大小将为0
,但您正在尝试访问位置1
只需将lrgctridx=0
放在for
循环之前。同样适用于maxarea
lrgctridx = 0;
maxarea = 0;
for (int i = 0; i < Contours.size(); i++)
{
....
时间=t+1假设没有等高线。lrgctrdx的值为0,它不会仍然绘制等高线。如果我更正了,唯一阻止它的就是面积=零分?如果我删除了那行代码,代码似乎可以正常工作understand@SridharThiagarajan是的,您还应该与lrgctridx一起重置maxarea=0
,这样您就不会调用drawContours。或者只要if(!courts.empty()){drawcourts…
@SridharThiagarajan很高兴它能帮上忙。一般来说,总是初始化变量并进行检查以防止出现极限情况。酷..如果我删除区域,代码也会起同样的作用!=0条件..为什么呢???@SridharThiagarajan我想如果hull
为空,你就不会画任何东西了
lrgctridx = 0;
maxarea = 0;
for (int i = 0; i < Contours.size(); i++)
{
....
if(!Contours.empty()) {
drawContours(...);
....