如何在OpenCV中获取Freeman链代码?

时间:2014-03-11 12:57:05

标签: c++ opencv

我正在尝试使用findCountours函数获取Freeman链代码,但我无法理解其参数,并且没有给出OpenCV documentation中每个参数的解释。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

使用此功能,您将获得Freeman连锁店的轮廓。它不会给你freeman链,它将它作为输入。

我不知道为什么在当前版本的OpenCV中没有cv :: CHAIN_CODE(它等于0)但是我已经检查了

vector<vector<cv::Point>> c;
cv::findContours(Img,c,RETR_EXTERNAL,0 );

运作良好。并为轮廓提供完整的弗里曼代码。

您也可以使用这个旧的API代码:

CvChain* chain=0;
CvMemStorage* storage=0;
storage=cvCreateMemStorage(0);
cvFindContours( &IplImage(Img), storage, (CvSeq**)(&chain), sizeof(*chain), CV_RETR_EXTERNAL, CV_CHAIN_CODE );

for(;chain!=NULL;chain=(CvChain*)chain ->h_next) 
{   
    //chain=(CvChain*)chain ->h_next; 
    //if(chain==NULL){break;}
    CvSeqReader reader; 
    int i, total = chain->total; 
    cvStartReadSeq((CvSeq*)chain,&reader,0); 
    printf("--------------------chain\n"); 

    for(i=0;i<total;i++) 
    { 
        char code; 
        CV_READ_SEQ_ELEM(code, reader); 
        printf("%d",code); 
    } 
}