2012-12-05 143 views
2

我已經閱讀了帖子herehere但他們不解決我得到的錯誤。函數C++ OpenCv錯誤凸起缺陷

我的代碼

vector<Vec4i> defects; 
vector<vector<int> >hull(contours.size()); 
for (int i = 0; i < contours.size(); i++) 
{ 
    convexHull(contours[i], hull[i], false, false); 
    if(contours[i].size() > 3) 
     convexityDefects(contours[i], hull[i], defects[i]); 
} 

根據以上這應該工作的職位,但事實並非如此。我仍然得到錯誤
error: (-215) hull.checkVector(1, CV_32S) > 2 in function convexityDefects
我真的沒有看到這裏的問題。

回答

2

好的,問題主要是因爲一些奇怪的原因,我的輪廓很小,以至於船體只是一條直線(意思是隻包含2個點)。 所以這個錯誤引用了船體矢量的大小,除了在其他似乎與矢量類型有關的帖子之外。

所以,僅僅用 if(hulls[i].size() > 2) 更換
if(contours[i].size() > 3) 工作正常。

0

opencv references報道:

ConvexityDefects(contour, convexhull, storage) → convexity_defects 
    Finds the convexity defects of a contour. 

Parameters: 
    contour (CvArr or CvSeq) – Input contour 
    convexhull (CvSeq) – Convex hull obtained using ConvexHull2 that should contain pointers or indices to the contour points, not the hull points themselves (the return_points parameter in ConvexHull2 should be 0) 
    storage (CvMemStorage) – Container for the output sequence of convexity defects. If it is NULL, the contour or hull (in that order) storage is used 

特別是,看看第二個參數:你確定是使用ConvexHull2獲得?

+0

嗨,我沒有使用OpenCV 2.1,我使用2.4。根據[opencv參考](http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=convexhull#convexitydefects),我應該使用並使用文檔中提到的凸的算法參數「returnPoints = false」 – moatilliatta

+0

您是否嘗試刪除if語句? –

+0

y,仍然無法正常工作。 – moatilliatta