diff --git a/modules/imgproc/src/contours.cpp b/modules/imgproc/src/contours.cpp index 464a9ad3c9..74f5e6201a 100644 --- a/modules/imgproc/src/contours.cpp +++ b/modules/imgproc/src/contours.cpp @@ -1893,14 +1893,23 @@ void cv::findContours( InputOutputArray _image, OutputArrayOfArrays _contours, CV_Assert(_contours.empty() || (_contours.channels() == 2 && _contours.depth() == CV_32S)); - Mat image; - copyMakeBorder(_image, image, 1, 1, 1, 1, BORDER_CONSTANT | BORDER_ISOLATED, Scalar(0)); + Mat image0 = _image.getMat(), image; + Point offset0(0, 0); + if(method != CV_LINK_RUNS) + { + offset0 = Point(-1, -1); + copyMakeBorder(image0, image, 1, 1, 1, 1, BORDER_CONSTANT | BORDER_ISOLATED, Scalar(0)); + } + else + { + image = image0; + } MemStorage storage(cvCreateMemStorage()); CvMat _cimage = image; CvSeq* _ccontours = 0; if( _hierarchy.needed() ) _hierarchy.clear(); - cvFindContours_Impl(&_cimage, storage, &_ccontours, sizeof(CvContour), mode, method, offset + Point(-1, -1), 0); + cvFindContours_Impl(&_cimage, storage, &_ccontours, sizeof(CvContour), mode, method, offset + offset0, 0); if( !_ccontours ) { _contours.clear();