2012-02-10 173 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));