From 4f5d5851843a1a6f4bbe0bc6d761f24a04fa7b45 Mon Sep 17 00:00:00 2001 From: Vitaly Tuzov Date: Fri, 4 Dec 2015 14:31:24 +0300 Subject: [PATCH] Update call to Tegra optimized morphology filtering --- modules/imgproc/src/morph.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/modules/imgproc/src/morph.cpp b/modules/imgproc/src/morph.cpp index 1cf4a625dd..118d4efedd 100644 --- a/modules/imgproc/src/morph.cpp +++ b/modules/imgproc/src/morph.cpp @@ -584,19 +584,11 @@ typedef MorphFVec DilateVec32f; #else -#ifdef HAVE_TEGRA_OPTIMIZATION -using tegra::ErodeRowVec8u; -using tegra::DilateRowVec8u; - -using tegra::ErodeColumnVec8u; -using tegra::DilateColumnVec8u; -#else typedef MorphRowNoVec ErodeRowVec8u; typedef MorphRowNoVec DilateRowVec8u; typedef MorphColumnNoVec ErodeColumnVec8u; typedef MorphColumnNoVec DilateColumnVec8u; -#endif typedef MorphRowNoVec ErodeRowVec16u; typedef MorphRowNoVec DilateRowVec16u; @@ -1114,6 +1106,17 @@ public: Mat srcStripe = src.rowRange(row0, row1); Mat dstStripe = dst.rowRange(row0, row1); + +#if defined HAVE_TEGRA_OPTIMIZATION + //Iterative separable filters are converted to single iteration filters + //But anyway check that we really get 1 iteration prior to processing + if( countNonZero(kernel) == kernel.rows*kernel.cols && iterations == 1 && + src.depth() == CV_8U && ( op == MORPH_ERODE || op == MORPH_DILATE ) && + tegra::morphology(srcStripe, dstStripe, op, kernel, anchor, + rowBorderType, columnBorderType, borderValue) ) + return; +#endif + Ptr f = createMorphologyFilter(op, src.type(), kernel, anchor, rowBorderType, columnBorderType, borderValue );