reverted to original plain C++ code
authorIlya Lavrenov <ilya.lavrenov@itseez.com>
Thu, 26 Jun 2014 09:13:01 +0000 (13:13 +0400)
committerIlya Lavrenov <ilya.lavrenov@itseez.com>
Thu, 26 Jun 2014 09:13:01 +0000 (13:13 +0400)
modules/imgproc/src/morph.cpp

index 3ab495d..6e31673 100644 (file)
@@ -1545,93 +1545,44 @@ void cv::morphologyEx( InputArray _src, OutputArray _dst, int op,
                        InputArray kernel, Point anchor, int iterations,
                        int borderType, const Scalar& borderValue )
 {
-    int src_type = _src.type(), dst_type = _dst.type(),
-        src_cn = CV_MAT_CN(src_type), src_depth = CV_MAT_DEPTH(src_type);
-
-    bool use_opencl = cv::ocl::useOpenCL() && _src.isUMat() && _src.size() == _dst.size() && src_type == dst_type &&
-        _src.dims()<=2 && (src_cn == 1 || src_cn == 4) && (anchor.x == -1) && (anchor.y == -1) &&
-        (src_depth == CV_8U || src_depth == CV_32F || src_depth == CV_64F ) &&
-        (borderType == cv::BORDER_CONSTANT) && (borderValue == morphologyDefaultBorderValue());
-
-    _dst.create(_src.size(), _src.type());
-    Mat src, dst, temp;
-    UMat usrc, udst, utemp;
+    Mat src = _src.getMat(), temp;
+    _dst.create(src.size(), src.type());
+    Mat dst = _dst.getMat();
 
     switch( op )
     {
     case MORPH_ERODE:
-        erode( _src, _dst, kernel, anchor, iterations, borderType, borderValue );
+        erode( src, dst, kernel, anchor, iterations, borderType, borderValue );
         break;
     case MORPH_DILATE:
-        dilate( _src, _dst, kernel, anchor, iterations, borderType, borderValue );
+        dilate( src, dst, kernel, anchor, iterations, borderType, borderValue );
         break;
     case MORPH_OPEN:
-        erode( _src, _dst, kernel, anchor, iterations, borderType, borderValue );
-        dilate( _dst, _dst, kernel, anchor, iterations, borderType, borderValue );
+        erode( src, dst, kernel, anchor, iterations, borderType, borderValue );
+        dilate( dst, dst, kernel, anchor, iterations, borderType, borderValue );
         break;
     case CV_MOP_CLOSE:
-        dilate( _src, _dst, kernel, anchor, iterations, borderType, borderValue );
-        erode( _dst, _dst, kernel, anchor, iterations, borderType, borderValue );
+        dilate( src, dst, kernel, anchor, iterations, borderType, borderValue );
+        erode( dst, dst, kernel, anchor, iterations, borderType, borderValue );
         break;
     case CV_MOP_GRADIENT:
-        erode( _src, use_opencl ? (cv::OutputArray)utemp : (cv::OutputArray)temp, kernel, anchor, iterations, borderType, borderValue );
-        dilate( _src, _dst, kernel, anchor, iterations, borderType, borderValue );
-        if(use_opencl)
-        {
-            udst = _dst.getUMat();
-            subtract(udst, utemp, udst);
-        }
-        else
-        {
-            dst = _dst.getMat();
-            dst -= temp;
-        }
+        erode( src, temp, kernel, anchor, iterations, borderType, borderValue );
+        dilate( src, dst, kernel, anchor, iterations, borderType, borderValue );
+        dst -= temp;
         break;
     case CV_MOP_TOPHAT:
-        if(use_opencl)
-        {
-            usrc = _src.getUMat();
-            udst = _dst.getUMat();
-            if( usrc.u != udst.u )
-                utemp = udst;
-        }
-        else
-        {
-            src = _src.getMat();
-            dst = _dst.getMat();
-            if( src.data != dst.data )
-                temp = dst;
-        }
-        erode( _src, use_opencl ? (cv::OutputArray)utemp : (cv::OutputArray)temp, kernel, anchor, iterations, borderType, borderValue );
-        dilate( use_opencl ? (cv::OutputArray)utemp : (cv::OutputArray)temp, use_opencl ? (cv::OutputArray)utemp : (cv::OutputArray)temp, kernel,
-            anchor, iterations, borderType, borderValue );
-        if(use_opencl)
-            subtract(usrc, utemp, udst);
-        else
-            dst = src - temp;
+        if( src.data != dst.data )
+            temp = dst;
+        erode( src, temp, kernel, anchor, iterations, borderType, borderValue );
+        dilate( temp, temp, kernel, anchor, iterations, borderType, borderValue );
+        dst = src - temp;
         break;
     case CV_MOP_BLACKHAT:
-        if(use_opencl)
-        {
-            usrc = _src.getUMat();
-            udst = _dst.getUMat();
-            if( usrc.u != udst.u )
-                utemp = udst;
-        }
-        else
-        {
-            src = _src.getMat();
-            dst = _dst.getMat();
-            if( src.data != dst.data )
-                temp = dst;
-        }
-        dilate( _src, use_opencl ? (cv::OutputArray)utemp : (cv::OutputArray)temp, kernel, anchor, iterations, borderType, borderValue );
-        erode( use_opencl ? (cv::OutputArray)utemp : (cv::OutputArray)temp, use_opencl ? (cv::OutputArray)utemp : (cv::OutputArray)temp, kernel,
-            anchor, iterations, borderType, borderValue );
-        if(use_opencl)
-            subtract(utemp, usrc, udst);
-        else
-            dst = temp - src;
+        if( src.data != dst.data )
+            temp = dst;
+        dilate( src, temp, kernel, anchor, iterations, borderType, borderValue );
+        erode( temp, temp, kernel, anchor, iterations, borderType, borderValue );
+        dst = temp - src;
         break;
     default:
         CV_Error( CV_StsBadArg, "unknown morphological operation" );