diff --git a/modules/imgproc/include/opencv2/imgproc/imgproc.hpp b/modules/imgproc/include/opencv2/imgproc/imgproc.hpp index 6d790d7cde..3bd41c355b 100644 --- a/modules/imgproc/include/opencv2/imgproc/imgproc.hpp +++ b/modules/imgproc/include/opencv2/imgproc/imgproc.hpp @@ -758,12 +758,12 @@ CV_EXPORTS_W void inpaint( InputArray src, InputArray inpaintMask, OutputArray dst, double inpaintRange, int flags ); //! builds the discrete Voronoi diagram -CV_EXPORTS_W void distanceTransform( InputArray src, OutputArray dst, +CV_EXPORTS_AS(distanceTransformWithLabels) void distanceTransform( InputArray src, OutputArray dst, OutputArray labels, int distanceType, int maskSize ); //! computes the distance transform map -CV_EXPORTS void distanceTransform( InputArray src, OutputArray dst, - int distanceType, int maskSize ); +CV_EXPORTS_W void distanceTransform( InputArray src, OutputArray dst, + int distanceType, int maskSize ); enum { FLOODFILL_FIXED_RANGE = 1 << 16, FLOODFILL_MASK_ONLY = 1 << 17 }; diff --git a/modules/imgproc/src/distransform.cpp b/modules/imgproc/src/distransform.cpp index 6a5e88654e..8ae5c7ab5f 100644 --- a/modules/imgproc/src/distransform.cpp +++ b/modules/imgproc/src/distransform.cpp @@ -826,14 +826,14 @@ cvDistTransform( const void* srcarr, void* dstarr, else { CvSeq *contours = 0; - CvPoint top_left = {0,0}, bottom_right = {size.width-1,size.height-1}; int label; st = cvCreateMemStorage(); - src_copy = cvCreateMat( size.height, size.width, src->type ); - cvCmpS( src, 0, src_copy, CV_CMP_EQ ); + src_copy = cvCreateMat( size.height+border*2, size.width+border*2, src->type ); + cvCopyMakeBorder(src, src_copy, cvPoint(border, border), IPL_BORDER_CONSTANT, cvScalarAll(255)); + cvCmpS( src_copy, 0, src_copy, CV_CMP_EQ ); cvFindContours( src_copy, st, &contours, sizeof(CvContour), - CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE ); + CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint(-border, -border)); cvZero( labels ); for( label = 1; contours != 0; contours = contours->h_next, label++ ) { @@ -841,10 +841,11 @@ cvDistTransform( const void* srcarr, void* dstarr, cvDrawContours( labels, contours, area_color, area_color, -255, -1, 8 ); } - cvCopy( src, src_copy ); - cvRectangle( src_copy, top_left, bottom_right, cvScalarAll(255), 1, 8 ); + //cvCopy( src, src_copy ); + //CvPoint top_left = {0,0}, bottom_right = {size.width-1,size.height-1}; + //cvRectangle( src_copy, top_left, bottom_right, cvScalarAll(255), 1, 8 ); - icvDistanceTransformEx_5x5_C1R( src_copy->data.ptr, src_copy->step, temp->data.i, temp->step, + icvDistanceTransformEx_5x5_C1R( src->data.ptr, src->step, temp->data.i, temp->step, dst->data.fl, dst->step, labels->data.i, labels->step, size, _mask ); } }