|
发表于 2016-6-4 23:26:21
|
显示全部楼层
可以參考這篇
http://blog.163.com/qingyu_1984/ ... 032013014104222956/
- mode = CV_RETR_LIST;
- contours_num=cvFindContours(preimg, storage, &contours, sizeof(CvContour), mode, CV_CHAIN_APPROX_NONE, cvPoint(0,0)); //-- contours_num 表示的是一共有多少条轮廓线
- for (;contours!=0;contours=contours->h_next) //-- 指向下一个轮廓序列
- {
- 这里遍历CvSeq里面的元素的方法很怪异
- onetourlength = contour->total;
- //给点数组分配空间,记得释放
- CvPoint *points = (CvPoint *)malloc(sizeof(CvPoint) * onetourlength);
- //printf("seqlength:%dn",seqlength);
- CvSeqReader reader; //-- 读其中一个轮廓序列
- CvPoint pt = cvPoint(0,0);
- cvStartReadSeq(contour,&reader); //开始提取
- for(int i = 0 ;i < onetourlength; i++){
- CV_READ_SEQ_ELEM(pt,reader); //--读其中一个序列中的一个元素点
- points[i] = pt;
- cvSeqPush(allpointsSeq,&pt);
- }
- //把这个轮廓点找出后,就可以用这些点画个封闭线
- cvPolyLine(image,&points,&onetourlength,1,0,CV_RGB(0,255,0),2,8,0);
- }
复制代码 |
|