From d25770ee76ddfb82b15998d39604fa34324b3482 Mon Sep 17 00:00:00 2001 From: Sander Mathijs van Veen Date: Sat, 26 Jul 2014 16:40:09 +0200 Subject: [PATCH] Fix Python 2 bindings for findContours The sanity check prevents Python 2 from calling findContours, because the Python 2 bindings pass an empty matrix for `_contours`. If `_contours` is not empty, the channel and depth check should determine whether the matrix is of the correct type and size. Note: the Python 2 bindings passes a matrix of type `STD_VECTOR_MAT` to parameters of the type `OutputArrayOfArrays`. --- modules/imgproc/src/contours.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/imgproc/src/contours.cpp b/modules/imgproc/src/contours.cpp index 5ea4a07c61..ee7f21ac88 100644 --- a/modules/imgproc/src/contours.cpp +++ b/modules/imgproc/src/contours.cpp @@ -1704,8 +1704,10 @@ void cv::findContours( InputOutputArray _image, OutputArrayOfArrays _contours, OutputArray _hierarchy, int mode, int method, Point offset ) { // Sanity check: output must be of type vector> - CV_Assert( _contours.kind() == _InputArray::STD_VECTOR_VECTOR && - _contours.channels() == 2 && _contours.depth() == CV_32S ); + CV_Assert((_contours.kind() == _InputArray::STD_VECTOR_VECTOR || _contours.kind() == _InputArray::STD_VECTOR_MAT || + _contours.kind() == _InputArray::STD_VECTOR_UMAT)); + + CV_Assert(_contours.empty() || (_contours.channels() == 2 && _contours.depth() == CV_32S)); Mat image = _image.getMat(); MemStorage storage(cvCreateMemStorage());