2012-02-10 171 views
2

我正在尝试使用cvFindContours,它绝对看起来像是要走的路。我遇到了一个最大的问题。有一个函数调用cvContourArea,它假设以序列的形式获取轮廓的区域。我遇到了麻烦。openCV cvContourArea

int conNum = cvFindContours(outerbox, storage, &contours, sizeof(CvContour),CV_RETR_LIST,CV_CHAIN_APPROX_NONE,cvPoint(0, 0)); 
CvSeq* current_contour = contours; 
double largestArea = 0; 
CvSeq* largest_contour = NULL; 


while (current_contour != NULL){ 
    double area = fabs(cvContourArea(&storage,CV_WHOLE_SEQ, false));  
    if(area > largestArea){ 
     largestArea = area; 
     largest_contour = current_contour; 
    } 
    current_contour = current_contour->h_next; 
} 

我试图与轮廓更换存储(在cvContourArea),但同样的错误不断想出无论是什么:

OpenCV Error: Bad argument (Input array is not a valid matrix) in cvPointSeqFromMat, file /Volumes/ramdisk/opencv/OpenCV-2.2.0/modules/imgproc/src/utils.cpp, line 53 

我一派,几乎找不到例子cvContourArea这3个参数的。 。就好像它最近改变了一样..我想通过找到的轮廓循环找到最大的一个,然后使用cvDrawContours方法绘制它。谢谢!

回答

1

尝试在以下语句中将&storage更改为current_contour

变化

double area = fabs(cvContourArea(&storage,CV_WHOLE_SEQ, false)); 

double area = fabs(cvContourArea(current_contour,CV_WHOLE_SEQ, 0));