我正在尝试使用 findCountours
函数获取 Freeman 链码,但我无法理解它的参数,并且在 OpenCV documentation 中没有对每个参数给出解释。 .
谁能帮帮我?
最佳答案
使用此功能,您将从弗里曼链获得轮廓。它不会给你自由人链,它会把它作为输入。
我不知道为什么在当前版本的 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);
}
}
关于c++ - 如何在OpenCV中获取Freeman链码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22326412/