我试图分离图像的轮廓(为了找到统一的区域),所以我应用了cvCanny然后cvFindContours,然后我每次按下一个键时使用以下代码绘制1个轮廓:
for( ; contours2 != 0; contours2 = contours2->h_next ){
cvSet(img6, cvScalar(0,0,0));
CvScalar color = CV_RGB( rand()&255, rand()&255, rand()&255 );
cvDrawContours(img6, contours2, color, cvScalarAll(255), 100);
//cvFillConvexPoly(img6,(CvPoint *)contours2,sizeof (contours2),color);
area=cvContourArea(contours2);
cvShowImage("3",img6);
printf(" %d", area);
cvWaitKey();
}
Run Code Online (Sandbox Code Playgroud)
但是在第一次迭代中它绘制了所有轮廓,在第二次迭代中它绘制了除了一个之外的所有轮廓,第三次绘制除了两个之外的所有轮廓,依此类推.
如果我用它填充大部分屏幕cvFillConvexPoly功能(尽管我写这个,我意识到一个凸多边形不会为我工作,我需要填写刚刚insideof轮廓)
那么,我怎样才能在for的每次迭代中只取一个轮廓,而不是所有剩余的轮廓?
谢谢.
我正在 OpenCV 中编写一个程序,该程序应该检测场景中的物体,即超市中的产品。
\n\n我计划使用 SURF 描述符来实现此目的,但是到目前为止我发现的所有内容都与在场景中查找 1 次出现的对象有关(通常使用最近邻匹配),并且我完全没有发现有关检测场景中对象的任何内容具有同一对象的多个实例(NN 显然不起作用,因为每个点的最佳匹配可能位于不同的实例中)。
\n\n我还需要使用分类器,例如人工神经网络,这对于查找对象的多个实例可能更有帮助,但是我不明白如何将 ANN (或任何其他分类器)与关键点一起使用。
\n\n我应该使用 \xc2\xbf64 吗?每个 SURF 点的值作为 ANN 的输入,以及每个(例如 5 个乘积)作为输出?这意味着一个对象内的所有点(不相似)将产生相同的输出。
\n\n我已经读到这是要走的路,但我不明白它是如何工作的,因为一个对象中的所有关键点可能(并且应该)具有不同的特征。但我想不出任何其他方法可以做到这一点。
\n\n抱歉,如果我没有解释得很好,如果有些事情不够清楚,我会尽力澄清。
\n