任意点序列的外围正放着的矩形

来源:互联网 发布:淘宝考试答案50题 编辑:程序博客网 时间:2024/06/05 06:04
CvMemStorage* storage_seq_a= cvCreateMemStorage(0);CvSeq* pt_seq_a= cvCreateSeq(CV_32SC2, sizeof(CvSeq), sizeof(CvPoint), storage_seq_a);//注意第一个参数,如果序列不会被传递给 任何使用特定序列的函数,那么将它设为 0,即某些函数要使用这个seq,但是该函数只能针对特定的类型,所以这个时候需要特殊设定CvMemStorage* storage_seq_b = cvCreateMemStorage(0);CvSeq* pt_seq_b = cvCreateSeq(CV_32SC2, sizeof(CvSeq), sizeof(CvPoint), storage_seq_b );CvSeqWriter writer_a,writer_b;cvStartAppendToSeq(pt_seq_a, &writer_a);cvStartAppendToSeq(pt_seq_b, &writer_b);matchingslist::iterator pt_m= matchings.begin();for(int i=0;pt_m!=matchings.end();pt_m++,i++){CvPoint point_a,point_b;point_a.x=pt_m->first.x;point_a.y=pt_m->first.y;point_b.x=pt_m->second.x;point_b.y=pt_m->second.y;CV_WRITE_SEQ_ELEM(point_a, writer_a);CV_WRITE_SEQ_ELEM(point_b, writer_b);}cvEndWriteSeq( &writer_a);cvEndWriteSeq( &writer_b);CvRect rect_seq=cvBoundingRect(pt_seq_a);

上面是求轮廓中的一种做法

亦可如下:

CvMemStorage* storage_seq_a= cvCreateMemStorage(0);CvSeq* pt_seq_a= cvCreateSeq(CV_32SC2, sizeof(CvSeq), sizeof(CvPoint), storage_seq_a);CvMemStorage* storage_seq_b = cvCreateMemStorage(0);CvSeq* pt_seq_b = cvCreateSeq(CV_32SC2, sizeof(CvSeq), sizeof(CvPoint), storage_seq_b );matchingslist::iterator pt_m= matchings.begin();for(int i=0;pt_m!=matchings.end();pt_m++,i++){CvPoint point_a,point_b;point_a.x=pt_m->first.x;point_a.y=pt_m->first.y;point_b.x=pt_m->second.x;point_b.y=pt_m->second.y;cvSeqPush(pt_seq_a, &point_a);cvSeqPush(pt_seq_b, &point_b);}CvRect rect_seq=cvBoundingRect(pt_seq_a);