findContours: integrate workaroung to allow contours detection on image border
authorVladislav Sovrasov <sovrasov.vlad@gmail.com>
Tue, 18 Oct 2016 11:16:14 +0000 (14:16 +0300)
committerVladislav Sovrasov <sovrasov.vlad@gmail.com>
Tue, 25 Oct 2016 08:38:07 +0000 (11:38 +0300)
modules/imgproc/src/contours.cpp

index d59c5a1..427cd05 100644 (file)
@@ -1878,13 +1878,14 @@ void cv::findContours( InputOutputArray _image, OutputArrayOfArrays _contours,
 
     CV_Assert(_contours.empty() || (_contours.channels() == 2 && _contours.depth() == CV_32S));
 
-    Mat image = _image.getMat();
+    Mat image;
+    copyMakeBorder(_image, image, 1, 1, 1, 1, BORDER_CONSTANT, Scalar(0));
     MemStorage storage(cvCreateMemStorage());
     CvMat _cimage = image;
     CvSeq* _ccontours = 0;
     if( _hierarchy.needed() )
         _hierarchy.clear();
-    cvFindContours(&_cimage, storage, &_ccontours, sizeof(CvContour), mode, method, offset);
+    cvFindContours(&_cimage, storage, &_ccontours, sizeof(CvContour), mode, method, offset + Point(-1, -1));
     if( !_ccontours )
     {
         _contours.clear();