CV_IMPL void cvInitSubdivDelaunay2D( CvSubdiv2D * subdiv, CvRect rect ) { float big_coord = 3.f * MAX( rect.width, rect.height ); CvPoint2D32f ppA, ppB, ppC; CvSubdiv2DPoint *pA, *pB, *pC; CvSubdiv2DEdge edge_AB, edge_BC, edge_CA; float rx = (float) rect.x; float ry = (float) rect.y; CV_FUNCNAME( "cvSubdivDelaunay2DInit" ); __BEGIN__; if( !subdiv ) CV_ERROR( CV_StsNullPtr, "" ); cvClearSet( (CvSet *) (subdiv->edges) ); cvClearSet( (CvSet *) subdiv ); subdiv->quad_edges = 0; subdiv->recent_edge = 0; subdiv->is_geometry_valid = 0; subdiv->topleft = cvPoint2D32f( rx, ry ); subdiv->bottomright = cvPoint2D32f( rx + rect.width, ry + rect.height ); ppA = cvPoint2D32f( rx + big_coord, ry ); ppB = cvPoint2D32f( rx, ry + big_coord ); ppC = cvPoint2D32f( rx - big_coord, ry - big_coord ); pA = cvSubdiv2DAddPoint( subdiv, ppA, 0 ); pB = cvSubdiv2DAddPoint( subdiv, ppB, 0 ); pC = cvSubdiv2DAddPoint( subdiv, ppC, 0 ); edge_AB = cvSubdiv2DMakeEdge( subdiv ); edge_BC = cvSubdiv2DMakeEdge( subdiv ); edge_CA = cvSubdiv2DMakeEdge( subdiv ); cvSubdiv2DSetEdgePoints( edge_AB, pA, pB ); cvSubdiv2DSetEdgePoints( edge_BC, pB, pC ); cvSubdiv2DSetEdgePoints( edge_CA, pC, pA ); cvSubdiv2DSplice( edge_AB, cvSubdiv2DSymEdge( edge_CA )); cvSubdiv2DSplice( edge_BC, cvSubdiv2DSymEdge( edge_AB )); cvSubdiv2DSplice( edge_CA, cvSubdiv2DSymEdge( edge_BC )); subdiv->recent_edge = edge_AB; __END__; }
CV_IMPL void cvSetZero( CvArr* arr ) { if( CV_IS_SPARSE_MAT(arr) ) { CvSparseMat* mat1 = (CvSparseMat*)arr; cvClearSet( mat1->heap ); if( mat1->hashtable ) memset( mat1->hashtable, 0, mat1->hashsize*sizeof(mat1->hashtable[0])); return; } cv::Mat m = cv::cvarrToMat(arr); m = cv::Scalar(0); }
/* dst = src */ CV_IMPL void cvCopy( const void* srcarr, void* dstarr, const void* maskarr ) { if( CV_IS_SPARSE_MAT(srcarr) && CV_IS_SPARSE_MAT(dstarr)) { CV_Assert( maskarr == 0 ); CvSparseMat* src1 = (CvSparseMat*)srcarr; CvSparseMat* dst1 = (CvSparseMat*)dstarr; CvSparseMatIterator iterator; CvSparseNode* node; dst1->dims = src1->dims; memcpy( dst1->size, src1->size, src1->dims*sizeof(src1->size[0])); dst1->valoffset = src1->valoffset; dst1->idxoffset = src1->idxoffset; cvClearSet( dst1->heap ); if( src1->heap->active_count >= dst1->hashsize*CV_SPARSE_HASH_RATIO ) { cvFree( &dst1->hashtable ); dst1->hashsize = src1->hashsize; dst1->hashtable = (void**)cvAlloc( dst1->hashsize*sizeof(dst1->hashtable[0])); } memset( dst1->hashtable, 0, dst1->hashsize*sizeof(dst1->hashtable[0])); for( node = cvInitSparseMatIterator( src1, &iterator ); node != 0; node = cvGetNextSparseNode( &iterator )) { CvSparseNode* node_copy = (CvSparseNode*)cvSetNew( dst1->heap ); int tabidx = node->hashval & (dst1->hashsize - 1); CV_MEMCPY_AUTO( node_copy, node, dst1->heap->elem_size ); node_copy->next = (CvSparseNode*)dst1->hashtable[tabidx]; dst1->hashtable[tabidx] = node_copy; } return; } cv::Mat src = cv::cvarrToMat(srcarr, false, true, 1), dst = cv::cvarrToMat(dstarr, false, true, 1); CV_Assert( src.depth() == dst.depth() && src.size() == dst.size() ); int coi1 = 0, coi2 = 0; if( CV_IS_IMAGE(srcarr) ) coi1 = cvGetImageCOI((const IplImage*)srcarr); if( CV_IS_IMAGE(dstarr) ) coi2 = cvGetImageCOI((const IplImage*)dstarr); if( coi1 || coi2 ) { CV_Assert( (coi1 != 0 || src.channels() == 1) && (coi2 != 0 || dst.channels() == 1) ); int pair[] = { std::max(coi1-1, 0), std::max(coi2-1, 0) }; cv::mixChannels( &src, 1, &dst, 1, pair, 1 ); return; } else CV_Assert( src.channels() == dst.channels() ); if( !maskarr ) src.copyTo(dst); else src.copyTo(dst, cv::cvarrToMat(maskarr)); }