2011-01-18 12 views
6

मैं ओपनसीवी दस्तावेज़ों में थोड़ा सा खो गया हूं, मैं सीवीएसईक को सीवीफ़िंडकंटर्स द्वारा एक सरणी में वापस सहेजना चाहता हूं, जो मुझे समझ में आता है कि यह सीवीकंटोर की सीईसी वापस कर देगा लेकिन मुझे यह नहीं मिला शामिल? इसके बाद के हिस्सों को मैं बाद में सहेज सकता हूं, बाद में मैं इसे फिर से चला सकता हूं और कॉल cvBoundingRect इत्यादि कह सकता हूंसीवीएसईक को एक सरणी में सहेजें

उत्तर

8

ए सीवीकंटोर एक सीवीएसईक के समान क्षेत्र के साथ एक संरचना है, साथ ही कुछ अन्य, सबसे महत्वपूर्ण जो एक सीवीआरईटीटीक्ट है (देखें/opencv/cxtypes.h देखें)। तो यह वास्तव में एक सीवीएसईक क्या है उबलता है।

opencv.pdf नामक एक फ़ाइल है जो ओपनसीवी स्रोतों के साथ आता है, और पी में। 138 (OpenCV 2.1 के लिए) यह कहता है कि CvSeq इस प्रकार परिभाषित किया गया है:

cvFindContours(img, storage, &contours, sizeof(CvContour), CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0)); 

, जहां contourscvFindContours बुला के बाद पहली समोच्च की ओर इशारा करते किया जाएगा:

#define CV_SEQUENCE\_FIELDS() 
    int flags; /* micsellaneous flags */ \ 
    int header_size; /* size of sequence header */ \ 
    struct CvSeq* h_prev; /* previous sequence */ \ 
    struct CvSeq* h_next; /* next sequence */ \ 
    struct CvSeq* v_prev; /* 2nd previous sequence */ \ 
    struct CvSeq* v_next; /* 2nd next sequence */ \ 
    int total; /* total number of elements */ \ 
    int elem_size;/* size of sequence element in bytes */ \ 
    char* block_max;/* maximal bound of the last block */ \ 
    char* ptr; /* current write pointer */ \ 
    int delta_elems; /* how many elements allocated when the sequence grows 
    (sequence granularity) */ \ 
    CvMemStorage* storage; /* where the seq is stored */ \ 
    CvSeqBlock* free_blocks; /* free blocks list */ \ 
    CvSeqBlock* first; /* pointer to the first sequence block */ 

typedef struct CvSeq 
{ 
    CV_SEQUENCE_FIELDS() 
} CvSeq; 

मान लीजिए कि आप इस तरह cvFindContours कहते हैं । यदि आप इसके बाध्य आयत प्राप्त करना चाहते हैं, तो आप इसे cvBoundingRect पर पास कर दें। अनुक्रम में अगला समोच्च contours->h_next के माध्यम से पहुंचा जा सकता है। समोच्च पेड़ के मामले में, यानी, जब एक समोच्च छवि में किसी अन्य समोच्च के अंदर हो सकता है, तो आप contours->v_next के माध्यम से वर्तमान समोच्च के पहले आंतरिक समोच्च तक पहुंच सकते हैं। अगला आंतरिक समोच्च, यदि यह मौजूद है, तो contours->v_next->h_next होगा, और बहुत आगे।

यदि आप किसी अनुक्रम को अनुक्रम में कनवर्ट करना चाहते हैं तो आप cvCvtSeqToArray का उपयोग कर सकते हैं।

आप ओपनसीवी 2.0 से शुरू होने वाले सी ++ इंटरफेस का भी उपयोग कर सकते हैं जो कि उपयोग करने के लिए अच्छा लगता है। उदाहरण के लिए, CvSeq** contours पैरामीटर cvFindContoursvector<vector<Point> >& contours बन जाता है।

संबंधित मुद्दे