From d9556a998ff22d6d9d8d2fd926f16f73921e84d2 Mon Sep 17 00:00:00 2001 From: Alexander Karsakov Date: Thu, 10 Apr 2014 11:00:08 +0400 Subject: [PATCH 1/6] Added ippiMinEigenVal_ to cv::cornerMinEigenVal --- modules/imgproc/src/corner.cpp | 47 ++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/modules/imgproc/src/corner.cpp b/modules/imgproc/src/corner.cpp index cc35ff2de5..1f9d7bda5a 100644 --- a/modules/imgproc/src/corner.cpp +++ b/modules/imgproc/src/corner.cpp @@ -460,6 +460,53 @@ void cv::cornerMinEigenVal( InputArray _src, OutputArray _dst, int blockSize, in Mat src = _src.getMat(); _dst.create( src.size(), CV_32FC1 ); Mat dst = _dst.getMat(); + +#ifdef HAVE_IPP + typedef IppStatus (CV_STDCALL * ippiMinEigenValGetBufferSize)(IppiSize, int, int, int*); + typedef IppStatus (CV_STDCALL * ippiMinEigenVal)(const void*, int, Ipp32f*, int, IppiSize, IppiKernelType, int, int, Ipp8u*); + + Size srcWholeSize; Point srcOffset; + src.locateROI(srcWholeSize, srcOffset); + if (borderType == BORDER_REPLICATE && srcWholeSize == src.size()) + { + IppiKernelType kerType = ksize > 0 ? ippKernelSobel : ippKernelScharr; + IppiSize srcRoi = { src.cols, src.rows }; + + ippiMinEigenValGetBufferSize getBufferSizeFunc = 0; + ippiMinEigenVal minEigenValFunc = 0; + float multiplier = 0.f; + + if (src.type() == CV_8UC1) + { + getBufferSizeFunc = (ippiMinEigenValGetBufferSize) ippiMinEigenValGetBufferSize_8u32f_C1R; + minEigenValFunc = (ippiMinEigenVal) ippiMinEigenVal_8u32f_C1R; + multiplier = (float) 1 / 255; + } else if (src.type() == CV_32FC1) + { + getBufferSizeFunc = (ippiMinEigenValGetBufferSize) ippiMinEigenValGetBufferSize_32f_C1R; + minEigenValFunc = (ippiMinEigenVal) ippiMinEigenVal_32f_C1R; + multiplier = 255.f; + } + + if (getBufferSizeFunc && minEigenValFunc) + { + int bufferSize; + IppStatus ok = getBufferSizeFunc(srcRoi, ksize, blockSize, &bufferSize); + if (ok >= 0) + { + + Ipp8u* buffer = ippsMalloc_8u(bufferSize); + ok = minEigenValFunc(src.data, src.step, (Ipp32f*) dst.data, (int) dst.step, srcRoi, kerType, ksize, blockSize, buffer); + ippsFree(buffer); + if (ok >= 0) + { + dst *= multiplier; + return; + } + } + } + } +#endif cornerEigenValsVecs( src, dst, blockSize, ksize, MINEIGENVAL, 0, borderType ); } From 7369cfd9ecc1e6d38cdffe42836652cf1c232855 Mon Sep 17 00:00:00 2001 From: Alexander Karsakov Date: Thu, 10 Apr 2014 14:02:43 +0400 Subject: [PATCH 2/6] Added perf test for cornerMinEigenVal --- .../perf/perf_cornerEigenValsAndVecs.cpp | 40 -------- modules/imgproc/perf/perf_cornerHarris.cpp | 39 -------- modules/imgproc/perf/perf_corners.cpp | 95 +++++++++++++++++++ modules/imgproc/src/corner.cpp | 23 ++--- 4 files changed, 104 insertions(+), 93 deletions(-) delete mode 100644 modules/imgproc/perf/perf_cornerEigenValsAndVecs.cpp delete mode 100644 modules/imgproc/perf/perf_cornerHarris.cpp create mode 100644 modules/imgproc/perf/perf_corners.cpp diff --git a/modules/imgproc/perf/perf_cornerEigenValsAndVecs.cpp b/modules/imgproc/perf/perf_cornerEigenValsAndVecs.cpp deleted file mode 100644 index 5a323cc2ab..0000000000 --- a/modules/imgproc/perf/perf_cornerEigenValsAndVecs.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include "perf_precomp.hpp" - -using namespace std; -using namespace cv; -using namespace perf; -using std::tr1::make_tuple; -using std::tr1::get; - -CV_ENUM(BorderType, BORDER_REPLICATE, BORDER_CONSTANT, BORDER_REFLECT, BORDER_REFLECT_101) - -typedef std::tr1::tuple Img_BlockSize_ApertureSize_BorderType_t; -typedef perf::TestBaseWithParam Img_BlockSize_ApertureSize_BorderType; - -PERF_TEST_P(Img_BlockSize_ApertureSize_BorderType, cornerEigenValsAndVecs, - testing::Combine( - testing::Values( "stitching/a1.png", "cv/shared/pic5.png"), - testing::Values( 3, 5 ), - testing::Values( 3, 5 ), - BorderType::all() - ) - ) -{ - string filename = getDataPath(get<0>(GetParam())); - int blockSize = get<1>(GetParam()); - int apertureSize = get<2>(GetParam()); - BorderType borderType = get<3>(GetParam()); - - Mat src = imread(filename, IMREAD_GRAYSCALE); - if (src.empty()) - FAIL() << "Unable to load source image" << filename; - - Mat dst; - - TEST_CYCLE() cornerEigenValsAndVecs(src, dst, blockSize, apertureSize, borderType); - - Mat l1; - extractChannel(dst, l1, 0); - - SANITY_CHECK(l1, 2e-5); -} diff --git a/modules/imgproc/perf/perf_cornerHarris.cpp b/modules/imgproc/perf/perf_cornerHarris.cpp deleted file mode 100644 index 832845e7e7..0000000000 --- a/modules/imgproc/perf/perf_cornerHarris.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "perf_precomp.hpp" - -using namespace std; -using namespace cv; -using namespace perf; -using std::tr1::make_tuple; -using std::tr1::get; - -CV_ENUM(BorderType, BORDER_REPLICATE, BORDER_CONSTANT, BORDER_REFLECT, BORDER_REFLECT_101) - -typedef std::tr1::tuple Img_BlockSize_ApertureSize_k_BorderType_t; -typedef perf::TestBaseWithParam Img_BlockSize_ApertureSize_k_BorderType; - -PERF_TEST_P(Img_BlockSize_ApertureSize_k_BorderType, cornerHarris, - testing::Combine( - testing::Values( "stitching/a1.png", "cv/shared/pic5.png"), - testing::Values( 3, 5 ), - testing::Values( 3, 5 ), - testing::Values( 0.04, 0.1 ), - BorderType::all() - ) - ) -{ - string filename = getDataPath(get<0>(GetParam())); - int blockSize = get<1>(GetParam()); - int apertureSize = get<2>(GetParam()); - double k = get<3>(GetParam()); - BorderType borderType = get<4>(GetParam()); - - Mat src = imread(filename, IMREAD_GRAYSCALE); - if (src.empty()) - FAIL() << "Unable to load source image" << filename; - - Mat dst; - - TEST_CYCLE() cornerHarris(src, dst, blockSize, apertureSize, k, borderType); - - SANITY_CHECK(dst, 2e-5); -} diff --git a/modules/imgproc/perf/perf_corners.cpp b/modules/imgproc/perf/perf_corners.cpp new file mode 100644 index 0000000000..33c6bc9467 --- /dev/null +++ b/modules/imgproc/perf/perf_corners.cpp @@ -0,0 +1,95 @@ +#include "perf_precomp.hpp" + +using namespace std; +using namespace cv; +using namespace perf; +using std::tr1::make_tuple; +using std::tr1::get; + +CV_ENUM(BorderType, BORDER_REPLICATE, BORDER_CONSTANT, BORDER_REFLECT, BORDER_REFLECT_101) + +typedef std::tr1::tuple Img_BlockSize_ApertureSize_k_BorderType_t; +typedef perf::TestBaseWithParam Img_BlockSize_ApertureSize_k_BorderType; + +PERF_TEST_P(Img_BlockSize_ApertureSize_k_BorderType, cornerHarris, + testing::Combine( + testing::Values( "stitching/a1.png", "cv/shared/pic5.png"), + testing::Values( 3, 5 ), + testing::Values( 3, 5 ), + testing::Values( 0.04, 0.1 ), + BorderType::all() + ) + ) +{ + string filename = getDataPath(get<0>(GetParam())); + int blockSize = get<1>(GetParam()); + int apertureSize = get<2>(GetParam()); + double k = get<3>(GetParam()); + BorderType borderType = get<4>(GetParam()); + + Mat src = imread(filename, IMREAD_GRAYSCALE); + if (src.empty()) + FAIL() << "Unable to load source image" << filename; + + Mat dst; + + TEST_CYCLE() cornerHarris(src, dst, blockSize, apertureSize, k, borderType); + + SANITY_CHECK(dst, 2e-5); +} + +typedef std::tr1::tuple Img_BlockSize_ApertureSize_BorderType_t; +typedef perf::TestBaseWithParam Img_BlockSize_ApertureSize_BorderType; + +PERF_TEST_P(Img_BlockSize_ApertureSize_BorderType, cornerEigenValsAndVecs, + testing::Combine( + testing::Values( "stitching/a1.png", "cv/shared/pic5.png"), + testing::Values( 3, 5 ), + testing::Values( 3, 5 ), + BorderType::all() + ) + ) +{ + string filename = getDataPath(get<0>(GetParam())); + int blockSize = get<1>(GetParam()); + int apertureSize = get<2>(GetParam()); + BorderType borderType = get<3>(GetParam()); + + Mat src = imread(filename, IMREAD_GRAYSCALE); + if (src.empty()) + FAIL() << "Unable to load source image" << filename; + + Mat dst; + + TEST_CYCLE() cornerEigenValsAndVecs(src, dst, blockSize, apertureSize, borderType); + + Mat l1; + extractChannel(dst, l1, 0); + + SANITY_CHECK(l1, 2e-5); +} + +PERF_TEST_P(Img_BlockSize_ApertureSize_BorderType, cornerMinEigenVal, + testing::Combine( + testing::Values( "stitching/a1.png", "cv/shared/pic5.png"), + testing::Values( 3, 5 ), + testing::Values( 3, 5 ), + BorderType::all() + ) + ) +{ + string filename = getDataPath(get<0>(GetParam())); + int blockSize = get<1>(GetParam()); + int apertureSize = get<2>(GetParam()); + BorderType borderType = get<3>(GetParam()); + + Mat src = imread(filename, IMREAD_GRAYSCALE); + if (src.empty()) + FAIL() << "Unable to load source image" << filename; + + Mat dst; + + TEST_CYCLE() cornerMinEigenVal(src, dst, blockSize, apertureSize, borderType); + + SANITY_CHECK(dst, 2e-5); +} diff --git a/modules/imgproc/src/corner.cpp b/modules/imgproc/src/corner.cpp index 1f9d7bda5a..cc03c8423f 100644 --- a/modules/imgproc/src/corner.cpp +++ b/modules/imgproc/src/corner.cpp @@ -465,44 +465,39 @@ void cv::cornerMinEigenVal( InputArray _src, OutputArray _dst, int blockSize, in typedef IppStatus (CV_STDCALL * ippiMinEigenValGetBufferSize)(IppiSize, int, int, int*); typedef IppStatus (CV_STDCALL * ippiMinEigenVal)(const void*, int, Ipp32f*, int, IppiSize, IppiKernelType, int, int, Ipp8u*); - Size srcWholeSize; Point srcOffset; - src.locateROI(srcWholeSize, srcOffset); - if (borderType == BORDER_REPLICATE && srcWholeSize == src.size()) + if (borderType == BORDER_REPLICATE && !src.isSubmatrix()) { - IppiKernelType kerType = ksize > 0 ? ippKernelSobel : ippKernelScharr; - IppiSize srcRoi = { src.cols, src.rows }; - ippiMinEigenValGetBufferSize getBufferSizeFunc = 0; ippiMinEigenVal minEigenValFunc = 0; - float multiplier = 0.f; + float norm_coef = 0.f; if (src.type() == CV_8UC1) { getBufferSizeFunc = (ippiMinEigenValGetBufferSize) ippiMinEigenValGetBufferSize_8u32f_C1R; minEigenValFunc = (ippiMinEigenVal) ippiMinEigenVal_8u32f_C1R; - multiplier = (float) 1 / 255; + norm_coef = 1.f / 255; } else if (src.type() == CV_32FC1) { getBufferSizeFunc = (ippiMinEigenValGetBufferSize) ippiMinEigenValGetBufferSize_32f_C1R; minEigenValFunc = (ippiMinEigenVal) ippiMinEigenVal_32f_C1R; - multiplier = 255.f; + norm_coef = 255.f; } if (getBufferSizeFunc && minEigenValFunc) { int bufferSize; + IppiKernelType kerType = ksize > 0 ? ippKernelSobel : ippKernelScharr; + IppiSize srcRoi = { src.cols, src.rows }; + IppiSize dstRoi = { dst.cols, dst.rows }; IppStatus ok = getBufferSizeFunc(srcRoi, ksize, blockSize, &bufferSize); if (ok >= 0) { - Ipp8u* buffer = ippsMalloc_8u(bufferSize); - ok = minEigenValFunc(src.data, src.step, (Ipp32f*) dst.data, (int) dst.step, srcRoi, kerType, ksize, blockSize, buffer); + ok = minEigenValFunc(src.data, (int) src.step, (Ipp32f*) dst.data, (int) dst.step, srcRoi, kerType, ksize, blockSize, buffer); + if (ok >= 0) ippiMulC_32f_C1IR(norm_coef, (Ipp32f*) dst.data, (int) dst.step, dstRoi); ippsFree(buffer); if (ok >= 0) - { - dst *= multiplier; return; - } } } } From 53bc93730cae0d17000c62c4b518e3a83b5c07f9 Mon Sep 17 00:00:00 2001 From: Alexander Karsakov Date: Thu, 10 Apr 2014 17:36:32 +0400 Subject: [PATCH 3/6] Added suppressing deprecation for ippiMulC_32f_C1IR --- modules/imgproc/src/corner.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/imgproc/src/corner.cpp b/modules/imgproc/src/corner.cpp index cc03c8423f..a74ba9493d 100644 --- a/modules/imgproc/src/corner.cpp +++ b/modules/imgproc/src/corner.cpp @@ -461,7 +461,7 @@ void cv::cornerMinEigenVal( InputArray _src, OutputArray _dst, int blockSize, in _dst.create( src.size(), CV_32FC1 ); Mat dst = _dst.getMat(); -#ifdef HAVE_IPP +#if defined(HAVE_IPP) && (IPP_VERSION_MAJOR >= 8) typedef IppStatus (CV_STDCALL * ippiMinEigenValGetBufferSize)(IppiSize, int, int, int*); typedef IppStatus (CV_STDCALL * ippiMinEigenVal)(const void*, int, Ipp32f*, int, IppiSize, IppiKernelType, int, int, Ipp8u*); @@ -494,9 +494,11 @@ void cv::cornerMinEigenVal( InputArray _src, OutputArray _dst, int blockSize, in { Ipp8u* buffer = ippsMalloc_8u(bufferSize); ok = minEigenValFunc(src.data, (int) src.step, (Ipp32f*) dst.data, (int) dst.step, srcRoi, kerType, ksize, blockSize, buffer); + CV_SUPPRESS_DEPRECATED_START if (ok >= 0) ippiMulC_32f_C1IR(norm_coef, (Ipp32f*) dst.data, (int) dst.step, dstRoi); + CV_SUPPRESS_DEPRECATED_END ippsFree(buffer); - if (ok >= 0) + if (ok >= 0) return; } } @@ -505,7 +507,6 @@ void cv::cornerMinEigenVal( InputArray _src, OutputArray _dst, int blockSize, in cornerEigenValsVecs( src, dst, blockSize, ksize, MINEIGENVAL, 0, borderType ); } - void cv::cornerHarris( InputArray _src, OutputArray _dst, int blockSize, int ksize, double k, int borderType ) { CV_OCL_RUN(_src.dims() <= 2 && _dst.isUMat(), From 10cb660240014653643f7eabe68569558ad41450 Mon Sep 17 00:00:00 2001 From: Alexander Karsakov Date: Tue, 15 Apr 2014 12:20:34 +0400 Subject: [PATCH 4/6] Fixed condition --- modules/imgproc/perf/perf_corners.cpp | 6 +++--- modules/imgproc/src/corner.cpp | 24 +++++++++++++++++------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/modules/imgproc/perf/perf_corners.cpp b/modules/imgproc/perf/perf_corners.cpp index 33c6bc9467..451b5e061a 100644 --- a/modules/imgproc/perf/perf_corners.cpp +++ b/modules/imgproc/perf/perf_corners.cpp @@ -35,7 +35,7 @@ PERF_TEST_P(Img_BlockSize_ApertureSize_k_BorderType, cornerHarris, TEST_CYCLE() cornerHarris(src, dst, blockSize, apertureSize, k, borderType); - SANITY_CHECK(dst, 2e-5); + SANITY_CHECK(dst, 2e-5, ERROR_RELATIVE); } typedef std::tr1::tuple Img_BlockSize_ApertureSize_BorderType_t; @@ -66,7 +66,7 @@ PERF_TEST_P(Img_BlockSize_ApertureSize_BorderType, cornerEigenValsAndVecs, Mat l1; extractChannel(dst, l1, 0); - SANITY_CHECK(l1, 2e-5); + SANITY_CHECK(l1, 2e-5, ERROR_RELATIVE); } PERF_TEST_P(Img_BlockSize_ApertureSize_BorderType, cornerMinEigenVal, @@ -91,5 +91,5 @@ PERF_TEST_P(Img_BlockSize_ApertureSize_BorderType, cornerMinEigenVal, TEST_CYCLE() cornerMinEigenVal(src, dst, blockSize, apertureSize, borderType); - SANITY_CHECK(dst, 2e-5); + SANITY_CHECK(dst, 2e-5, ERROR_RELATIVE); } diff --git a/modules/imgproc/src/corner.cpp b/modules/imgproc/src/corner.cpp index a74ba9493d..d0ed626a65 100644 --- a/modules/imgproc/src/corner.cpp +++ b/modules/imgproc/src/corner.cpp @@ -464,8 +464,20 @@ void cv::cornerMinEigenVal( InputArray _src, OutputArray _dst, int blockSize, in #if defined(HAVE_IPP) && (IPP_VERSION_MAJOR >= 8) typedef IppStatus (CV_STDCALL * ippiMinEigenValGetBufferSize)(IppiSize, int, int, int*); typedef IppStatus (CV_STDCALL * ippiMinEigenVal)(const void*, int, Ipp32f*, int, IppiSize, IppiKernelType, int, int, Ipp8u*); - - if (borderType == BORDER_REPLICATE && !src.isSubmatrix()) + IppiKernelType kerType; + int kerSize = ksize; + if (ksize < 0) + { + kerType = ippKernelScharr; + kerSize = 3; + } else + { + kerType = ippKernelSobel; + } + bool isolated = (borderType & BORDER_ISOLATED) != 0; + int borderTypeNI = borderType & ~BORDER_ISOLATED; + if ((borderTypeNI == BORDER_REPLICATE && (!src.isSubmatrix() || isolated)) && + (kerSize == 3 || kerSize == 5) && (kerSize == 3 || blockSize == 5)) { ippiMinEigenValGetBufferSize getBufferSizeFunc = 0; ippiMinEigenVal minEigenValFunc = 0; @@ -475,7 +487,7 @@ void cv::cornerMinEigenVal( InputArray _src, OutputArray _dst, int blockSize, in { getBufferSizeFunc = (ippiMinEigenValGetBufferSize) ippiMinEigenValGetBufferSize_8u32f_C1R; minEigenValFunc = (ippiMinEigenVal) ippiMinEigenVal_8u32f_C1R; - norm_coef = 1.f / 255; + norm_coef = 1.f / 255.f; } else if (src.type() == CV_32FC1) { getBufferSizeFunc = (ippiMinEigenValGetBufferSize) ippiMinEigenValGetBufferSize_32f_C1R; @@ -486,16 +498,14 @@ void cv::cornerMinEigenVal( InputArray _src, OutputArray _dst, int blockSize, in if (getBufferSizeFunc && minEigenValFunc) { int bufferSize; - IppiKernelType kerType = ksize > 0 ? ippKernelSobel : ippKernelScharr; IppiSize srcRoi = { src.cols, src.rows }; - IppiSize dstRoi = { dst.cols, dst.rows }; IppStatus ok = getBufferSizeFunc(srcRoi, ksize, blockSize, &bufferSize); if (ok >= 0) { Ipp8u* buffer = ippsMalloc_8u(bufferSize); - ok = minEigenValFunc(src.data, (int) src.step, (Ipp32f*) dst.data, (int) dst.step, srcRoi, kerType, ksize, blockSize, buffer); + ok = minEigenValFunc(src.data, (int) src.step, (Ipp32f*) dst.data, (int) dst.step, srcRoi, kerType, kerSize, blockSize, buffer); CV_SUPPRESS_DEPRECATED_START - if (ok >= 0) ippiMulC_32f_C1IR(norm_coef, (Ipp32f*) dst.data, (int) dst.step, dstRoi); + if (ok >= 0) ippiMulC_32f_C1IR(norm_coef, (Ipp32f*) dst.data, (int) dst.step, srcRoi); CV_SUPPRESS_DEPRECATED_END ippsFree(buffer); if (ok >= 0) From 5580d08c6e0e27652a269801ffe38db07947565e Mon Sep 17 00:00:00 2001 From: Alexander Karsakov Date: Fri, 18 Apr 2014 09:01:08 +0400 Subject: [PATCH 5/6] Added setIppErrorStatus() --- modules/imgproc/perf/perf_corners.cpp | 9 +++------ modules/imgproc/src/corner.cpp | 5 +++-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/modules/imgproc/perf/perf_corners.cpp b/modules/imgproc/perf/perf_corners.cpp index 451b5e061a..dd1e2cc3a2 100644 --- a/modules/imgproc/perf/perf_corners.cpp +++ b/modules/imgproc/perf/perf_corners.cpp @@ -28,8 +28,7 @@ PERF_TEST_P(Img_BlockSize_ApertureSize_k_BorderType, cornerHarris, BorderType borderType = get<4>(GetParam()); Mat src = imread(filename, IMREAD_GRAYSCALE); - if (src.empty()) - FAIL() << "Unable to load source image" << filename; + ASSERT_FALSE(src.empty()) << "Unable to load source image: " << filename; Mat dst; @@ -56,8 +55,7 @@ PERF_TEST_P(Img_BlockSize_ApertureSize_BorderType, cornerEigenValsAndVecs, BorderType borderType = get<3>(GetParam()); Mat src = imread(filename, IMREAD_GRAYSCALE); - if (src.empty()) - FAIL() << "Unable to load source image" << filename; + ASSERT_FALSE(src.empty()) << "Unable to load source image: " << filename; Mat dst; @@ -84,8 +82,7 @@ PERF_TEST_P(Img_BlockSize_ApertureSize_BorderType, cornerMinEigenVal, BorderType borderType = get<3>(GetParam()); Mat src = imread(filename, IMREAD_GRAYSCALE); - if (src.empty()) - FAIL() << "Unable to load source image" << filename; + ASSERT_FALSE(src.empty()) << "Unable to load source image: " << filename; Mat dst; diff --git a/modules/imgproc/src/corner.cpp b/modules/imgproc/src/corner.cpp index d0ed626a65..62a6b2152e 100644 --- a/modules/imgproc/src/corner.cpp +++ b/modules/imgproc/src/corner.cpp @@ -461,7 +461,7 @@ void cv::cornerMinEigenVal( InputArray _src, OutputArray _dst, int blockSize, in _dst.create( src.size(), CV_32FC1 ); Mat dst = _dst.getMat(); -#if defined(HAVE_IPP) && (IPP_VERSION_MAJOR >= 8) +#if defined(HAVE_IPP) && !defined(HAVE_IPP_ICV_ONLY) && (IPP_VERSION_MAJOR >= 8) typedef IppStatus (CV_STDCALL * ippiMinEigenValGetBufferSize)(IppiSize, int, int, int*); typedef IppStatus (CV_STDCALL * ippiMinEigenVal)(const void*, int, Ipp32f*, int, IppiSize, IppiKernelType, int, int, Ipp8u*); IppiKernelType kerType; @@ -505,12 +505,13 @@ void cv::cornerMinEigenVal( InputArray _src, OutputArray _dst, int blockSize, in Ipp8u* buffer = ippsMalloc_8u(bufferSize); ok = minEigenValFunc(src.data, (int) src.step, (Ipp32f*) dst.data, (int) dst.step, srcRoi, kerType, kerSize, blockSize, buffer); CV_SUPPRESS_DEPRECATED_START - if (ok >= 0) ippiMulC_32f_C1IR(norm_coef, (Ipp32f*) dst.data, (int) dst.step, srcRoi); + if (ok >= 0) ok = ippiMulC_32f_C1IR(norm_coef, (Ipp32f*) dst.data, (int) dst.step, srcRoi); CV_SUPPRESS_DEPRECATED_END ippsFree(buffer); if (ok >= 0) return; } + setIppErrorStatus(); } } #endif From eda084e12362268db9b6c4bc0b49379434ff15b7 Mon Sep 17 00:00:00 2001 From: Alexander Karsakov Date: Mon, 5 May 2014 14:40:59 +0400 Subject: [PATCH 6/6] Used AutoBuffer instead ippsMalloc --- modules/imgproc/src/corner.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/imgproc/src/corner.cpp b/modules/imgproc/src/corner.cpp index 62a6b2152e..a7975d577b 100644 --- a/modules/imgproc/src/corner.cpp +++ b/modules/imgproc/src/corner.cpp @@ -502,12 +502,11 @@ void cv::cornerMinEigenVal( InputArray _src, OutputArray _dst, int blockSize, in IppStatus ok = getBufferSizeFunc(srcRoi, ksize, blockSize, &bufferSize); if (ok >= 0) { - Ipp8u* buffer = ippsMalloc_8u(bufferSize); + AutoBuffer buffer(bufferSize); ok = minEigenValFunc(src.data, (int) src.step, (Ipp32f*) dst.data, (int) dst.step, srcRoi, kerType, kerSize, blockSize, buffer); CV_SUPPRESS_DEPRECATED_START if (ok >= 0) ok = ippiMulC_32f_C1IR(norm_coef, (Ipp32f*) dst.data, (int) dst.step, srcRoi); CV_SUPPRESS_DEPRECATED_END - ippsFree(buffer); if (ok >= 0) return; }