CV_IMPL int icvSubdiv2DCheck( CvSubdiv2D* subdiv ) { int i, j, total = subdiv->edges->total; int check_result = 0; CV_FUNCNAME("icvSubdiv2DCheck"); __BEGIN__; if( !subdiv ) CV_ERROR_FROM_STATUS( CV_NULLPTR_ERR ); for( i = 0; i < total; i++ ) { CvQuadEdge2D* edge = (CvQuadEdge2D*)cvGetSetElem(subdiv->edges,i); if( edge && CV_IS_SET_ELEM( edge )) { for( j = 0; j < 4; j++ ) { CvSubdiv2DEdge e = (CvSubdiv2DEdge)edge + j; CvSubdiv2DEdge o_next = cvSubdiv2DNextEdge(e); CvSubdiv2DEdge o_prev = cvSubdiv2DGetEdge(e, CV_PREV_AROUND_ORG ); CvSubdiv2DEdge d_prev = cvSubdiv2DGetEdge(e, CV_PREV_AROUND_DST ); CvSubdiv2DEdge d_next = cvSubdiv2DGetEdge(e, CV_NEXT_AROUND_DST ); // check points if( cvSubdiv2DEdgeOrg(e) != cvSubdiv2DEdgeOrg(o_next)) EXIT; if( cvSubdiv2DEdgeOrg(e) != cvSubdiv2DEdgeOrg(o_prev)) EXIT; if( cvSubdiv2DEdgeDst(e) != cvSubdiv2DEdgeDst(d_next)) EXIT; if( cvSubdiv2DEdgeDst(e) != cvSubdiv2DEdgeDst(d_prev)) EXIT; if( j % 2 == 0 ) { if( cvSubdiv2DEdgeDst(o_next) != cvSubdiv2DEdgeOrg(d_prev)) EXIT; if( cvSubdiv2DEdgeDst(o_prev) != cvSubdiv2DEdgeOrg(d_next)) EXIT; if( cvSubdiv2DGetEdge(cvSubdiv2DGetEdge(cvSubdiv2DGetEdge( e,CV_NEXT_AROUND_LEFT),CV_NEXT_AROUND_LEFT),CV_NEXT_AROUND_LEFT) != e ) EXIT; if( cvSubdiv2DGetEdge(cvSubdiv2DGetEdge(cvSubdiv2DGetEdge( e,CV_NEXT_AROUND_RIGHT),CV_NEXT_AROUND_RIGHT),CV_NEXT_AROUND_RIGHT) != e) EXIT; } } } } check_result = 1; __END__; return check_result; }
CV_IMPL int icvSubdiv2DCheck( CvSubdiv2D* subdiv ) { int i, j, total = subdiv->edges->total; CV_Assert( subdiv != 0 ); for( i = 0; i < total; i++ ) { CvQuadEdge2D* edge = (CvQuadEdge2D*)cvGetSetElem(subdiv->edges,i); if( edge && CV_IS_SET_ELEM( edge )) { for( j = 0; j < 4; j++ ) { CvSubdiv2DEdge e = (CvSubdiv2DEdge)edge + j; CvSubdiv2DEdge o_next = cvSubdiv2DNextEdge(e); CvSubdiv2DEdge o_prev = cvSubdiv2DGetEdge(e, CV_PREV_AROUND_ORG ); CvSubdiv2DEdge d_prev = cvSubdiv2DGetEdge(e, CV_PREV_AROUND_DST ); CvSubdiv2DEdge d_next = cvSubdiv2DGetEdge(e, CV_NEXT_AROUND_DST ); // check points if( cvSubdiv2DEdgeOrg(e) != cvSubdiv2DEdgeOrg(o_next)) return 0; if( cvSubdiv2DEdgeOrg(e) != cvSubdiv2DEdgeOrg(o_prev)) return 0; if( cvSubdiv2DEdgeDst(e) != cvSubdiv2DEdgeDst(d_next)) return 0; if( cvSubdiv2DEdgeDst(e) != cvSubdiv2DEdgeDst(d_prev)) return 0; if( j % 2 == 0 ) { if( cvSubdiv2DEdgeDst(o_next) != cvSubdiv2DEdgeOrg(d_prev)) return 0; if( cvSubdiv2DEdgeDst(o_prev) != cvSubdiv2DEdgeOrg(d_next)) return 0; if( cvSubdiv2DGetEdge(cvSubdiv2DGetEdge(cvSubdiv2DGetEdge( e,CV_NEXT_AROUND_LEFT),CV_NEXT_AROUND_LEFT),CV_NEXT_AROUND_LEFT) != e ) return 0; if( cvSubdiv2DGetEdge(cvSubdiv2DGetEdge(cvSubdiv2DGetEdge( e,CV_NEXT_AROUND_RIGHT),CV_NEXT_AROUND_RIGHT),CV_NEXT_AROUND_RIGHT) != e) return 0; } } } } return 1; }
CV_IMPL void icvDrawMosaic( CvSubdiv2D * subdiv, IplImage * src, IplImage * dst ) { int i, total = subdiv->edges->total; cvCalcSubdivVoronoi2D( subdiv ); //icvSet( dst, 255 ); for( i = 0; i < total; i++ ) { CvQuadEdge2D *edge = (CvQuadEdge2D *) cvGetSetElem( subdiv->edges, i ); if( edge && CV_IS_SET_ELEM( edge )) { CvSubdiv2DEdge e = (CvSubdiv2DEdge) edge; // left draw_subdiv_facet( subdiv, dst, src, cvSubdiv2DRotateEdge( e, 1 )); // right draw_subdiv_facet( subdiv, dst, src, cvSubdiv2DRotateEdge( e, 3 )); } } }
CvSetElem * cvGetSetElem_wrap(const CvSet * set_header , int index ){ return cvGetSetElem(/*const*//*CvSet*//***/set_header , /*int*/index); }