Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
34e4e66b
Commit
34e4e66b
authored
Sep 30, 2015
by
Alexander Alekhin
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #5419 from lupustr3:pvlasov/ipp9_integration
parents
9b6424e0
62854dcc
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
343 additions
and
60 deletions
+343
-60
private.hpp
modules/core/include/opencv2/core/private.hpp
+5
-0
dxt.cpp
modules/core/src/dxt.cpp
+160
-29
stat.cpp
modules/core/src/stat.cpp
+30
-0
canny.cpp
modules/imgproc/src/canny.cpp
+6
-0
color.cpp
modules/imgproc/src/color.cpp
+2
-0
deriv.cpp
modules/imgproc/src/deriv.cpp
+29
-0
histogram.cpp
modules/imgproc/src/histogram.cpp
+52
-9
morph.cpp
modules/imgproc/src/morph.cpp
+55
-22
haar.cpp
modules/objdetect/src/haar.cpp
+4
-0
No files found.
modules/core/include/opencv2/core/private.hpp
View file @
34e4e66b
...
...
@@ -245,6 +245,11 @@ static inline IppDataType ippiGetDataType(int depth)
#define IPP_VERSION_X100 0
#endif
// There shoud be no API difference in OpenCV between ICV and IPP since 9.0
#if (defined HAVE_IPP_ICV_ONLY) && IPP_VERSION_X100 >= 900
#undef HAVE_IPP_ICV_ONLY
#endif
#ifdef HAVE_IPP_ICV_ONLY
#define HAVE_ICV 1
#else
...
...
modules/core/src/dxt.cpp
View file @
34e4e66b
...
...
@@ -3318,28 +3318,102 @@ static void IDCT_64f(const double* src, int src_step, double* dft_src, double* d
}
#ifdef HAVE_IPP
namespace
cv
{
#if defined HAVE_IPP && IPP_VERSION_MAJOR >= 7
#if IPP_VERSION_X100 >= 900
typedef
IppStatus
(
CV_STDCALL
*
ippiDCTFunc
)(
const
Ipp32f
*
pSrc
,
int
srcStep
,
Ipp32f
*
pDst
,
int
dstStep
,
const
void
*
pDCTSpec
,
Ipp8u
*
pBuffer
);
typedef
IppStatus
(
CV_STDCALL
*
ippiDCTInit
)(
void
*
pDCTSpec
,
IppiSize
roiSize
,
Ipp8u
*
pMemInit
);
typedef
IppStatus
(
CV_STDCALL
*
ippiDCTGetSize
)(
IppiSize
roiSize
,
int
*
pSizeSpec
,
int
*
pSizeInit
,
int
*
pSizeBuf
);
#elif IPP_VERSION_X100 >= 700
typedef
IppStatus
(
CV_STDCALL
*
ippiDCTFunc
)(
const
Ipp32f
*
,
int
,
Ipp32f
*
,
int
,
const
void
*
,
Ipp8u
*
);
typedef
IppStatus
(
CV_STDCALL
*
ippiDCTInitAlloc
)(
void
**
,
IppiSize
,
IppHintAlgorithm
);
typedef
IppStatus
(
CV_STDCALL
*
ippiDCTFree
)(
void
*
pDCTSpec
);
typedef
IppStatus
(
CV_STDCALL
*
ippiDCTGetBufSize
)(
const
void
*
,
int
*
);
#endif
template
<
typename
Dct
>
class
DctIPPLoop_Invoker
:
public
ParallelLoopBody
{
public
:
DctIPPLoop_Invoker
(
const
Mat
&
_src
,
Mat
&
_dst
,
const
Dct
*
_ippidct
,
bool
_inv
,
bool
*
_ok
)
:
ParallelLoopBody
(),
src
(
&
_src
),
dst
(
&
_dst
),
ippidct
(
_ippidct
),
inv
(
_inv
),
ok
(
_ok
)
DctIPPLoop_Invoker
(
const
Mat
&
_src
,
Mat
&
_dst
,
bool
_inv
,
bool
*
_ok
)
:
ParallelLoopBody
(),
src
(
&
_src
),
dst
(
&
_dst
),
inv
(
_inv
),
ok
(
_ok
)
{
*
ok
=
true
;
}
virtual
void
operator
()(
const
Range
&
range
)
const
{
if
(
*
ok
==
false
)
return
;
#if IPP_VERSION_X100 >= 900
IppiSize
srcRoiSize
=
{
src
->
cols
,
1
};
int
specSize
=
0
;
int
initSize
=
0
;
int
bufferSize
=
0
;
Ipp8u
*
pDCTSpec
=
NULL
;
Ipp8u
*
pBuffer
=
NULL
;
Ipp8u
*
pInitBuf
=
NULL
;
#define IPP_RETURN \
if(pDCTSpec) \
ippFree(pDCTSpec); \
if(pBuffer) \
ippFree(pBuffer); \
if(pInitBuf) \
ippFree(pInitBuf); \
return;
ippiDCTFunc
ippDctFun
=
inv
?
(
ippiDCTFunc
)
ippiDCTInv_32f_C1R
:
(
ippiDCTFunc
)
ippiDCTFwd_32f_C1R
;
ippiDCTInit
ippDctInit
=
inv
?
(
ippiDCTInit
)
ippiDCTInvInit_32f
:
(
ippiDCTInit
)
ippiDCTFwdInit_32f
;
ippiDCTGetSize
ippDctGetSize
=
inv
?
(
ippiDCTGetSize
)
ippiDCTInvGetSize_32f
:
(
ippiDCTGetSize
)
ippiDCTFwdGetSize_32f
;
if
(
ippDctGetSize
(
srcRoiSize
,
&
specSize
,
&
initSize
,
&
bufferSize
)
<
0
)
{
*
ok
=
false
;
return
;
}
pDCTSpec
=
(
Ipp8u
*
)
ippMalloc
(
specSize
);
if
(
!
pDCTSpec
&&
specSize
)
{
*
ok
=
false
;
return
;
}
pBuffer
=
(
Ipp8u
*
)
ippMalloc
(
bufferSize
);
if
(
!
pBuffer
&&
bufferSize
)
{
*
ok
=
false
;
IPP_RETURN
}
pInitBuf
=
(
Ipp8u
*
)
ippMalloc
(
initSize
);
if
(
!
pInitBuf
&&
initSize
)
{
*
ok
=
false
;
IPP_RETURN
}
if
(
ippDctInit
(
pDCTSpec
,
srcRoiSize
,
pInitBuf
)
<
0
)
{
*
ok
=
false
;
IPP_RETURN
}
for
(
int
i
=
range
.
start
;
i
<
range
.
end
;
++
i
)
{
if
(
ippDctFun
(
src
->
ptr
<
float
>
(
i
),
(
int
)
src
->
step
,
dst
->
ptr
<
float
>
(
i
),
(
int
)
dst
->
step
,
pDCTSpec
,
pBuffer
)
<
0
)
{
*
ok
=
false
;
IPP_RETURN
}
}
IPP_RETURN
#undef IPP_RETURN
#elif IPP_VERSION_X100 >= 700
void
*
pDCTSpec
;
AutoBuffer
<
uchar
>
buf
;
uchar
*
pBuffer
=
0
;
...
...
@@ -3349,6 +3423,7 @@ public:
CV_SUPPRESS_DEPRECATED_START
ippiDCTFunc
ippDctFun
=
inv
?
(
ippiDCTFunc
)
ippiDCTInv_32f_C1R
:
(
ippiDCTFunc
)
ippiDCTFwd_32f_C1R
;
ippiDCTInitAlloc
ippInitAlloc
=
inv
?
(
ippiDCTInitAlloc
)
ippiDCTInvInitAlloc_32f
:
(
ippiDCTInitAlloc
)
ippiDCTFwdInitAlloc_32f
;
ippiDCTFree
ippFree
=
inv
?
(
ippiDCTFree
)
ippiDCTInvFree_32f
:
(
ippiDCTFree
)
ippiDCTFwdFree_32f
;
ippiDCTGetBufSize
ippGetBufSize
=
inv
?
(
ippiDCTGetBufSize
)
ippiDCTInvGetBufSize_32f
:
(
ippiDCTGetBufSize
)
ippiDCTFwdGetBufSize_32f
;
...
...
@@ -3359,8 +3434,13 @@ public:
pBuffer
=
(
uchar
*
)
buf
;
for
(
int
i
=
range
.
start
;
i
<
range
.
end
;
++
i
)
if
(
!
(
*
ippidct
)(
src
->
ptr
<
float
>
(
i
),
(
int
)
src
->
step
,
dst
->
ptr
<
float
>
(
i
),
(
int
)
dst
->
step
,
pDCTSpec
,
(
Ipp8u
*
)
pBuffer
))
{
if
(
ippDctFun
(
src
->
ptr
<
float
>
(
i
),
(
int
)
src
->
step
,
dst
->
ptr
<
float
>
(
i
),
(
int
)
dst
->
step
,
pDCTSpec
,
(
Ipp8u
*
)
pBuffer
)
<
0
)
{
*
ok
=
false
;
break
;
}
}
}
else
*
ok
=
false
;
...
...
@@ -3369,44 +3449,91 @@ public:
ippFree
(
pDCTSpec
);
CV_SUPPRESS_DEPRECATED_END
#else
CV_UNUSED
(
range
);
*
ok
=
false
;
#endif
}
private
:
const
Mat
*
src
;
Mat
*
dst
;
const
Dct
*
ippidct
;
bool
inv
;
bool
*
ok
;
};
template
<
typename
Dct
>
bool
DctIPPLoop
(
const
Mat
&
src
,
Mat
&
dst
,
const
Dct
&
ippidct
,
bool
inv
)
static
bool
DctIPPLoop
(
const
Mat
&
src
,
Mat
&
dst
,
bool
inv
)
{
bool
ok
;
parallel_for_
(
Range
(
0
,
src
.
rows
),
DctIPPLoop_Invoker
<
Dct
>
(
src
,
dst
,
&
ippidc
t
,
inv
,
&
ok
),
src
.
rows
/
(
double
)(
1
<<
4
)
);
parallel_for_
(
Range
(
0
,
src
.
rows
),
DctIPPLoop_Invoker
(
src
,
ds
t
,
inv
,
&
ok
),
src
.
rows
/
(
double
)(
1
<<
4
)
);
return
ok
;
}
struct
IPPDCTFunctor
{
IPPDCTFunctor
(
ippiDCTFunc
_func
)
:
func
(
_func
){}
bool
operator
()(
const
Ipp32f
*
src
,
int
srcStep
,
Ipp32f
*
dst
,
int
dstStep
,
const
void
*
pDCTSpec
,
Ipp8u
*
pBuffer
)
const
{
return
func
?
func
(
src
,
srcStep
,
dst
,
dstStep
,
pDCTSpec
,
pBuffer
)
>=
0
:
false
;
}
private
:
ippiDCTFunc
func
;
};
static
bool
ippi_DCT_32f
(
const
Mat
&
src
,
Mat
&
dst
,
bool
inv
,
bool
row
)
{
ippiDCTFunc
ippFunc
=
inv
?
(
ippiDCTFunc
)
ippiDCTInv_32f_C1R
:
(
ippiDCTFunc
)
ippiDCTFwd_32f_C1R
;
if
(
row
)
return
(
DctIPPLoop
(
src
,
dst
,
IPPDCTFunctor
(
ippFunc
),
inv
));
if
(
row
)
return
DctIPPLoop
(
src
,
dst
,
inv
);
else
{
#if IPP_VERSION_X100 >= 900
IppiSize
srcRoiSize
=
{
src
.
cols
,
src
.
rows
};
int
specSize
=
0
;
int
initSize
=
0
;
int
bufferSize
=
0
;
Ipp8u
*
pDCTSpec
=
NULL
;
Ipp8u
*
pBuffer
=
NULL
;
Ipp8u
*
pInitBuf
=
NULL
;
#define IPP_RELEASE \
if(pDCTSpec) \
ippFree(pDCTSpec); \
if(pBuffer) \
ippFree(pBuffer); \
if(pInitBuf) \
ippFree(pInitBuf); \
ippiDCTFunc
ippDctFun
=
inv
?
(
ippiDCTFunc
)
ippiDCTInv_32f_C1R
:
(
ippiDCTFunc
)
ippiDCTFwd_32f_C1R
;
ippiDCTInit
ippDctInit
=
inv
?
(
ippiDCTInit
)
ippiDCTInvInit_32f
:
(
ippiDCTInit
)
ippiDCTFwdInit_32f
;
ippiDCTGetSize
ippDctGetSize
=
inv
?
(
ippiDCTGetSize
)
ippiDCTInvGetSize_32f
:
(
ippiDCTGetSize
)
ippiDCTFwdGetSize_32f
;
if
(
ippDctGetSize
(
srcRoiSize
,
&
specSize
,
&
initSize
,
&
bufferSize
)
<
0
)
return
false
;
pDCTSpec
=
(
Ipp8u
*
)
ippMalloc
(
specSize
);
if
(
!
pDCTSpec
&&
specSize
)
return
false
;
pBuffer
=
(
Ipp8u
*
)
ippMalloc
(
bufferSize
);
if
(
!
pBuffer
&&
bufferSize
)
{
IPP_RELEASE
return
false
;
}
pInitBuf
=
(
Ipp8u
*
)
ippMalloc
(
initSize
);
if
(
!
pInitBuf
&&
initSize
)
{
IPP_RELEASE
return
false
;
}
if
(
ippDctInit
(
pDCTSpec
,
srcRoiSize
,
pInitBuf
)
<
0
)
{
IPP_RELEASE
return
false
;
}
if
(
ippDctFun
(
src
.
ptr
<
float
>
(),
(
int
)
src
.
step
,
dst
.
ptr
<
float
>
(),
(
int
)
dst
.
step
,
pDCTSpec
,
pBuffer
)
<
0
)
{
IPP_RELEASE
return
false
;
}
IPP_RELEASE
return
true
;
#undef IPP_RELEASE
#elif IPP_VERSION_X100 >= 700
IppStatus
status
;
void
*
pDCTSpec
;
AutoBuffer
<
uchar
>
buf
;
...
...
@@ -3417,6 +3544,7 @@ static bool ippi_DCT_32f(const Mat& src, Mat& dst, bool inv, bool row)
CV_SUPPRESS_DEPRECATED_START
ippiDCTFunc
ippDctFun
=
inv
?
(
ippiDCTFunc
)
ippiDCTInv_32f_C1R
:
(
ippiDCTFunc
)
ippiDCTFwd_32f_C1R
;
ippiDCTInitAlloc
ippInitAlloc
=
inv
?
(
ippiDCTInitAlloc
)
ippiDCTInvInitAlloc_32f
:
(
ippiDCTInitAlloc
)
ippiDCTFwdInitAlloc_32f
;
ippiDCTFree
ippFree
=
inv
?
(
ippiDCTFree
)
ippiDCTInvFree_32f
:
(
ippiDCTFree
)
ippiDCTFwdFree_32f
;
ippiDCTGetBufSize
ippGetBufSize
=
inv
?
(
ippiDCTGetBufSize
)
ippiDCTInvGetBufSize_32f
:
(
ippiDCTGetBufSize
)
ippiDCTFwdGetBufSize_32f
;
...
...
@@ -3428,7 +3556,7 @@ static bool ippi_DCT_32f(const Mat& src, Mat& dst, bool inv, bool row)
buf
.
allocate
(
bufSize
);
pBuffer
=
(
uchar
*
)
buf
;
status
=
ipp
Func
(
src
.
ptr
<
float
>
(),
(
int
)
src
.
step
,
dst
.
ptr
<
float
>
(),
(
int
)
dst
.
step
,
pDCTSpec
,
(
Ipp8u
*
)
pBuffer
);
status
=
ipp
DctFun
(
src
.
ptr
<
float
>
(),
(
int
)
src
.
step
,
dst
.
ptr
<
float
>
(),
(
int
)
dst
.
step
,
pDCTSpec
,
(
Ipp8u
*
)
pBuffer
);
}
if
(
pDCTSpec
)
...
...
@@ -3437,11 +3565,14 @@ static bool ippi_DCT_32f(const Mat& src, Mat& dst, bool inv, bool row)
CV_SUPPRESS_DEPRECATED_END
return
status
>=
0
;
#else
CV_UNUSED
(
src
);
CV_UNUSED
(
dst
);
CV_UNUSED
(
inv
);
CV_UNUSED
(
row
);
return
false
;
#endif
}
}
#endif
}
#endif
void
cv
::
dct
(
InputArray
_src0
,
OutputArray
_dst
,
int
flags
)
{
...
...
modules/core/src/stat.cpp
View file @
34e4e66b
...
...
@@ -2233,7 +2233,9 @@ static bool ipp_minMaxIdx( Mat &src, double* minVal, double* maxVal, int* minIdx
CV_SUPPRESS_DEPRECATED_START
ippiMaskMinMaxIndxFuncC1
ippFuncC1
=
type
==
CV_8UC1
?
(
ippiMaskMinMaxIndxFuncC1
)
ippiMinMaxIndx_8u_C1MR
:
#if IPP_VERSION_X100 < 900
type
==
CV_8SC1
?
(
ippiMaskMinMaxIndxFuncC1
)
ippiMinMaxIndx_8s_C1MR
:
#endif
type
==
CV_16UC1
?
(
ippiMaskMinMaxIndxFuncC1
)
ippiMinMaxIndx_16u_C1MR
:
type
==
CV_32FC1
?
(
ippiMaskMinMaxIndxFuncC1
)
ippiMinMaxIndx_32f_C1MR
:
0
;
CV_SUPPRESS_DEPRECATED_END
...
...
@@ -2270,8 +2272,12 @@ static bool ipp_minMaxIdx( Mat &src, double* minVal, double* maxVal, int* minIdx
CV_SUPPRESS_DEPRECATED_START
ippiMinMaxIndxFuncC1
ippFuncC1
=
#if IPP_VERSION_X100 != 900 // bug in 9.0.0 avx2 optimization
depth
==
CV_8U
?
(
ippiMinMaxIndxFuncC1
)
ippiMinMaxIndx_8u_C1R
:
#endif
#if IPP_VERSION_X100 < 900
depth
==
CV_8S
?
(
ippiMinMaxIndxFuncC1
)
ippiMinMaxIndx_8s_C1R
:
#endif
depth
==
CV_16U
?
(
ippiMinMaxIndxFuncC1
)
ippiMinMaxIndx_16u_C1R
:
#if !((defined _MSC_VER && defined _M_IX86) || defined __i386__)
depth
==
CV_32F
?
(
ippiMinMaxIndxFuncC1
)
ippiMinMaxIndx_32f_C1R
:
...
...
@@ -2676,19 +2682,25 @@ static bool ipp_norm(Mat &src, int normType, Mat &mask, double &result)
ippiMaskNormFuncC1
ippFuncC1
=
normType
==
NORM_INF
?
(
type
==
CV_8UC1
?
(
ippiMaskNormFuncC1
)
ippiNorm_Inf_8u_C1MR
:
#if IPP_VERSION_X100 < 900
type
==
CV_8SC1
?
(
ippiMaskNormFuncC1
)
ippiNorm_Inf_8s_C1MR
:
#endif
// type == CV_16UC1 ? (ippiMaskNormFuncC1)ippiNorm_Inf_16u_C1MR :
type
==
CV_32FC1
?
(
ippiMaskNormFuncC1
)
ippiNorm_Inf_32f_C1MR
:
0
)
:
normType
==
NORM_L1
?
(
type
==
CV_8UC1
?
(
ippiMaskNormFuncC1
)
ippiNorm_L1_8u_C1MR
:
#if IPP_VERSION_X100 < 900
type
==
CV_8SC1
?
(
ippiMaskNormFuncC1
)
ippiNorm_L1_8s_C1MR
:
#endif
type
==
CV_16UC1
?
(
ippiMaskNormFuncC1
)
ippiNorm_L1_16u_C1MR
:
type
==
CV_32FC1
?
(
ippiMaskNormFuncC1
)
ippiNorm_L1_32f_C1MR
:
0
)
:
normType
==
NORM_L2
||
normType
==
NORM_L2SQR
?
(
type
==
CV_8UC1
?
(
ippiMaskNormFuncC1
)
ippiNorm_L2_8u_C1MR
:
#if IPP_VERSION_X100 < 900
type
==
CV_8SC1
?
(
ippiMaskNormFuncC1
)
ippiNorm_L2_8s_C1MR
:
#endif
type
==
CV_16UC1
?
(
ippiMaskNormFuncC1
)
ippiNorm_L2_16u_C1MR
:
type
==
CV_32FC1
?
(
ippiMaskNormFuncC1
)
ippiNorm_L2_32f_C1MR
:
0
)
:
0
;
...
...
@@ -3071,23 +3083,29 @@ static bool ipp_norm(InputArray _src1, InputArray _src2, int normType, InputArra
ippiMaskNormRelFuncC1
ippFuncC1
=
normType
==
NORM_INF
?
(
type
==
CV_8UC1
?
(
ippiMaskNormRelFuncC1
)
ippiNormRel_Inf_8u_C1MR
:
#if IPP_VERSION_X100 < 900
#ifndef __APPLE__
type
==
CV_8SC1
?
(
ippiMaskNormRelFuncC1
)
ippiNormRel_Inf_8s_C1MR
:
#endif
#endif
type
==
CV_16UC1
?
(
ippiMaskNormRelFuncC1
)
ippiNormRel_Inf_16u_C1MR
:
type
==
CV_32FC1
?
(
ippiMaskNormRelFuncC1
)
ippiNormRel_Inf_32f_C1MR
:
0
)
:
normType
==
NORM_L1
?
(
type
==
CV_8UC1
?
(
ippiMaskNormRelFuncC1
)
ippiNormRel_L1_8u_C1MR
:
#if IPP_VERSION_X100 < 900
#ifndef __APPLE__
type
==
CV_8SC1
?
(
ippiMaskNormRelFuncC1
)
ippiNormRel_L1_8s_C1MR
:
#endif
#endif
type
==
CV_16UC1
?
(
ippiMaskNormRelFuncC1
)
ippiNormRel_L1_16u_C1MR
:
type
==
CV_32FC1
?
(
ippiMaskNormRelFuncC1
)
ippiNormRel_L1_32f_C1MR
:
0
)
:
normType
==
NORM_L2
||
normType
==
NORM_L2SQR
?
(
type
==
CV_8UC1
?
(
ippiMaskNormRelFuncC1
)
ippiNormRel_L2_8u_C1MR
:
#if IPP_VERSION_X100 < 900
type
==
CV_8SC1
?
(
ippiMaskNormRelFuncC1
)
ippiNormRel_L2_8s_C1MR
:
#endif
type
==
CV_16UC1
?
(
ippiMaskNormRelFuncC1
)
ippiNormRel_L2_16u_C1MR
:
type
==
CV_32FC1
?
(
ippiMaskNormRelFuncC1
)
ippiNormRel_L2_32f_C1MR
:
0
)
:
0
;
...
...
@@ -3172,21 +3190,27 @@ static bool ipp_norm(InputArray _src1, InputArray _src2, int normType, InputArra
ippiMaskNormDiffFuncC1
ippFuncC1
=
normType
==
NORM_INF
?
(
type
==
CV_8UC1
?
(
ippiMaskNormDiffFuncC1
)
ippiNormDiff_Inf_8u_C1MR
:
#if IPP_VERSION_X100 < 900
type
==
CV_8SC1
?
(
ippiMaskNormDiffFuncC1
)
ippiNormDiff_Inf_8s_C1MR
:
#endif
type
==
CV_16UC1
?
(
ippiMaskNormDiffFuncC1
)
ippiNormDiff_Inf_16u_C1MR
:
type
==
CV_32FC1
?
(
ippiMaskNormDiffFuncC1
)
ippiNormDiff_Inf_32f_C1MR
:
0
)
:
normType
==
NORM_L1
?
(
type
==
CV_8UC1
?
(
ippiMaskNormDiffFuncC1
)
ippiNormDiff_L1_8u_C1MR
:
#if IPP_VERSION_X100 < 900
#ifndef __APPLE__
type
==
CV_8SC1
?
(
ippiMaskNormDiffFuncC1
)
ippiNormDiff_L1_8s_C1MR
:
#endif
#endif
type
==
CV_16UC1
?
(
ippiMaskNormDiffFuncC1
)
ippiNormDiff_L1_16u_C1MR
:
type
==
CV_32FC1
?
(
ippiMaskNormDiffFuncC1
)
ippiNormDiff_L1_32f_C1MR
:
0
)
:
normType
==
NORM_L2
||
normType
==
NORM_L2SQR
?
(
type
==
CV_8UC1
?
(
ippiMaskNormDiffFuncC1
)
ippiNormDiff_L2_8u_C1MR
:
#if IPP_VERSION_X100 < 900
type
==
CV_8SC1
?
(
ippiMaskNormDiffFuncC1
)
ippiNormDiff_L2_8s_C1MR
:
#endif
type
==
CV_16UC1
?
(
ippiMaskNormDiffFuncC1
)
ippiNormDiff_L2_16u_C1MR
:
type
==
CV_32FC1
?
(
ippiMaskNormDiffFuncC1
)
ippiNormDiff_L2_32f_C1MR
:
0
)
:
0
;
...
...
@@ -3204,19 +3228,25 @@ static bool ipp_norm(InputArray _src1, InputArray _src2, int normType, InputArra
ippiMaskNormDiffFuncC3
ippFuncC3
=
normType
==
NORM_INF
?
(
type
==
CV_8UC3
?
(
ippiMaskNormDiffFuncC3
)
ippiNormDiff_Inf_8u_C3CMR
:
#if IPP_VERSION_X100 < 900
type
==
CV_8SC3
?
(
ippiMaskNormDiffFuncC3
)
ippiNormDiff_Inf_8s_C3CMR
:
#endif
type
==
CV_16UC3
?
(
ippiMaskNormDiffFuncC3
)
ippiNormDiff_Inf_16u_C3CMR
:
type
==
CV_32FC3
?
(
ippiMaskNormDiffFuncC3
)
ippiNormDiff_Inf_32f_C3CMR
:
0
)
:
normType
==
NORM_L1
?
(
type
==
CV_8UC3
?
(
ippiMaskNormDiffFuncC3
)
ippiNormDiff_L1_8u_C3CMR
:
#if IPP_VERSION_X100 < 900
type
==
CV_8SC3
?
(
ippiMaskNormDiffFuncC3
)
ippiNormDiff_L1_8s_C3CMR
:
#endif
type
==
CV_16UC3
?
(
ippiMaskNormDiffFuncC3
)
ippiNormDiff_L1_16u_C3CMR
:
type
==
CV_32FC3
?
(
ippiMaskNormDiffFuncC3
)
ippiNormDiff_L1_32f_C3CMR
:
0
)
:
normType
==
NORM_L2
||
normType
==
NORM_L2SQR
?
(
type
==
CV_8UC3
?
(
ippiMaskNormDiffFuncC3
)
ippiNormDiff_L2_8u_C3CMR
:
#if IPP_VERSION_X100 < 900
type
==
CV_8SC3
?
(
ippiMaskNormDiffFuncC3
)
ippiNormDiff_L2_8s_C3CMR
:
#endif
type
==
CV_16UC3
?
(
ippiMaskNormDiffFuncC3
)
ippiNormDiff_L2_16u_C3CMR
:
type
==
CV_32FC3
?
(
ippiMaskNormDiffFuncC3
)
ippiNormDiff_L2_32f_C3CMR
:
0
)
:
0
;
...
...
modules/imgproc/src/canny.cpp
View file @
34e4e66b
...
...
@@ -60,10 +60,16 @@ static bool ippCanny(const Mat& _src, Mat& _dst, float low, float high)
int
size
=
0
,
size1
=
0
;
IppiSize
roi
=
{
_src
.
cols
,
_src
.
rows
};
#if IPP_VERSION_X100 < 900
if
(
ippiFilterSobelNegVertGetBufferSize_8u16s_C1R
(
roi
,
ippMskSize3x3
,
&
size
)
<
0
)
return
false
;
if
(
ippiFilterSobelHorizGetBufferSize_8u16s_C1R
(
roi
,
ippMskSize3x3
,
&
size1
)
<
0
)
return
false
;
#else
if
(
ippiFilterSobelGetBufferSize
(
roi
,
ippMskSize3x3
,
ippNormL2
,
ipp8u
,
ipp16s
,
1
,
&
size
)
<
0
)
return
false
;
#endif
size
=
std
::
max
(
size
,
size1
);
if
(
ippiCannyGetSize
(
roi
,
&
size1
)
<
0
)
...
...
modules/imgproc/src/color.cpp
View file @
34e4e66b
...
...
@@ -7416,6 +7416,7 @@ static bool ipp_cvtColor( Mat &src, OutputArray _dst, int code, int dcn )
return
false
;
#endif
#if IPP_VERSION_X100 < 900
case
CV_BGR5652BGR
:
case
CV_BGR5552BGR
:
case
CV_BGR5652RGB
:
case
CV_BGR5552RGB
:
case
CV_BGR5652BGRA
:
case
CV_BGR5552BGRA
:
case
CV_BGR5652RGBA
:
case
CV_BGR5552RGBA
:
if
(
dcn
<=
0
)
dcn
=
(
code
==
CV_BGR5652BGRA
||
code
==
CV_BGR5552BGRA
||
code
==
CV_BGR5652RGBA
||
code
==
CV_BGR5552RGBA
)
?
4
:
3
;
...
...
@@ -7449,6 +7450,7 @@ static bool ipp_cvtColor( Mat &src, OutputArray _dst, int code, int dcn )
}
CV_SUPPRESS_DEPRECATED_END
return
false
;
#endif
#if IPP_VERSION_X100 >= 700
case
CV_BGR2GRAY
:
case
CV_BGRA2GRAY
:
case
CV_RGB2GRAY
:
case
CV_RGBA2GRAY
:
...
...
modules/imgproc/src/deriv.cpp
View file @
34e4e66b
...
...
@@ -325,11 +325,19 @@ static bool IPPDerivSobel(InputArray _src, OutputArray _dst, int ddepth, int dx,
if
(
src
.
type
()
==
CV_8U
&&
dst
.
type
()
==
CV_16S
&&
scale
==
1
)
{
#if IPP_VERSION_X100 >= 900
if
(
ippiFilterSobelGetBufferSize
(
roi
,
kernel
,
ippNormL2
,
ipp8u
,
ipp16s
,
1
,
&
bufSize
)
<
0
)
return
false
;
buffer
.
allocate
(
bufSize
);
#endif
if
((
dx
==
1
)
&&
(
dy
==
0
))
{
#if IPP_VERSION_X100 < 900
if
(
0
>
ippiFilterSobelNegVertGetBufferSize_8u16s_C1R
(
roi
,
kernel
,
&
bufSize
))
return
false
;
buffer
.
allocate
(
bufSize
);
#endif
if
(
0
>
ippiFilterSobelNegVertBorder_8u16s_C1R
(
src
.
ptr
<
Ipp8u
>
(),
(
int
)
src
.
step
,
dst
.
ptr
<
Ipp16s
>
(),
(
int
)
dst
.
step
,
roi
,
kernel
,
...
...
@@ -340,9 +348,11 @@ static bool IPPDerivSobel(InputArray _src, OutputArray _dst, int ddepth, int dx,
if
((
dx
==
0
)
&&
(
dy
==
1
))
{
#if IPP_VERSION_X100 < 900
if
(
0
>
ippiFilterSobelHorizGetBufferSize_8u16s_C1R
(
roi
,
kernel
,
&
bufSize
))
return
false
;
buffer
.
allocate
(
bufSize
);
#endif
if
(
0
>
ippiFilterSobelHorizBorder_8u16s_C1R
(
src
.
ptr
<
Ipp8u
>
(),
(
int
)
src
.
step
,
dst
.
ptr
<
Ipp16s
>
(),
(
int
)
dst
.
step
,
roi
,
kernel
,
...
...
@@ -354,9 +364,11 @@ static bool IPPDerivSobel(InputArray _src, OutputArray _dst, int ddepth, int dx,
#if !defined(HAVE_IPP_ICV_ONLY)
if
((
dx
==
2
)
&&
(
dy
==
0
))
{
#if IPP_VERSION_X100 < 900
if
(
0
>
ippiFilterSobelVertSecondGetBufferSize_8u16s_C1R
(
roi
,
kernel
,
&
bufSize
))
return
false
;
buffer
.
allocate
(
bufSize
);
#endif
if
(
0
>
ippiFilterSobelVertSecondBorder_8u16s_C1R
(
src
.
ptr
<
Ipp8u
>
(),
(
int
)
src
.
step
,
dst
.
ptr
<
Ipp16s
>
(),
(
int
)
dst
.
step
,
roi
,
kernel
,
...
...
@@ -367,9 +379,11 @@ static bool IPPDerivSobel(InputArray _src, OutputArray _dst, int ddepth, int dx,
if
((
dx
==
0
)
&&
(
dy
==
2
))
{
#if IPP_VERSION_X100 < 900
if
(
0
>
ippiFilterSobelHorizSecondGetBufferSize_8u16s_C1R
(
roi
,
kernel
,
&
bufSize
))
return
false
;
buffer
.
allocate
(
bufSize
);
#endif
if
(
0
>
ippiFilterSobelHorizSecondBorder_8u16s_C1R
(
src
.
ptr
<
Ipp8u
>
(),
(
int
)
src
.
step
,
dst
.
ptr
<
Ipp16s
>
(),
(
int
)
dst
.
step
,
roi
,
kernel
,
...
...
@@ -382,12 +396,20 @@ static bool IPPDerivSobel(InputArray _src, OutputArray _dst, int ddepth, int dx,
if
(
src
.
type
()
==
CV_32F
&&
dst
.
type
()
==
CV_32F
)
{
#if IPP_VERSION_X100 >= 900
if
(
ippiFilterSobelGetBufferSize
(
roi
,
kernel
,
ippNormL2
,
ipp32f
,
ipp32f
,
1
,
&
bufSize
)
<
0
)
return
false
;
buffer
.
allocate
(
bufSize
);
#endif
#if IPP_DISABLE_BLOCK
if
((
dx
==
1
)
&&
(
dy
==
0
))
{
#if IPP_VERSION_X100 < 900
if
(
0
>
ippiFilterSobelNegVertGetBufferSize_32f_C1R
(
roi
,
kernel
,
&
bufSize
))
return
false
;
buffer
.
allocate
(
bufSize
);
#endif
if
(
0
>
ippiFilterSobelNegVertBorder_32f_C1R
(
src
.
ptr
<
Ipp32f
>
(),
(
int
)
src
.
step
,
dst
.
ptr
<
Ipp32f
>
(),
(
int
)
dst
.
step
,
roi
,
kernel
,
...
...
@@ -400,9 +422,12 @@ static bool IPPDerivSobel(InputArray _src, OutputArray _dst, int ddepth, int dx,
if
((
dx
==
0
)
&&
(
dy
==
1
))
{
#if IPP_VERSION_X100 < 900
if
(
0
>
ippiFilterSobelHorizGetBufferSize_32f_C1R
(
roi
,
kernel
,
&
bufSize
))
return
false
;
buffer
.
allocate
(
bufSize
);
#endif
if
(
0
>
ippiFilterSobelHorizBorder_32f_C1R
(
src
.
ptr
<
Ipp32f
>
(),
(
int
)
src
.
step
,
dst
.
ptr
<
Ipp32f
>
(),
(
int
)
dst
.
step
,
roi
,
kernel
,
ippBorderRepl
,
0
,
(
Ipp8u
*
)(
char
*
)
buffer
))
...
...
@@ -415,9 +440,11 @@ static bool IPPDerivSobel(InputArray _src, OutputArray _dst, int ddepth, int dx,
#if !defined(HAVE_IPP_ICV_ONLY)
if
((
dx
==
2
)
&&
(
dy
==
0
))
{
#if IPP_VERSION_X100 < 900
if
(
0
>
ippiFilterSobelVertSecondGetBufferSize_32f_C1R
(
roi
,
kernel
,
&
bufSize
))
return
false
;
buffer
.
allocate
(
bufSize
);
#endif
if
(
0
>
ippiFilterSobelVertSecondBorder_32f_C1R
(
src
.
ptr
<
Ipp32f
>
(),
(
int
)
src
.
step
,
dst
.
ptr
<
Ipp32f
>
(),
(
int
)
dst
.
step
,
roi
,
kernel
,
...
...
@@ -430,9 +457,11 @@ static bool IPPDerivSobel(InputArray _src, OutputArray _dst, int ddepth, int dx,
if
((
dx
==
0
)
&&
(
dy
==
2
))
{
#if IPP_VERSION_X100 < 900
if
(
0
>
ippiFilterSobelHorizSecondGetBufferSize_32f_C1R
(
roi
,
kernel
,
&
bufSize
))
return
false
;
buffer
.
allocate
(
bufSize
);
#endif
if
(
0
>
ippiFilterSobelHorizSecondBorder_32f_C1R
(
src
.
ptr
<
Ipp32f
>
(),
(
int
)
src
.
step
,
dst
.
ptr
<
Ipp32f
>
(),
(
int
)
dst
.
step
,
roi
,
kernel
,
...
...
modules/imgproc/src/histogram.cpp
View file @
34e4e66b
...
...
@@ -1180,7 +1180,7 @@ class IPPCalcHistInvoker :
public
ParallelLoopBody
{
public
:
IPPCalcHistInvoker
(
const
Mat
&
_src
,
Mat
&
_hist
,
AutoBuffer
<
Ipp32
s
>
&
_levels
,
Ipp32s
_histSize
,
Ipp32s
_low
,
Ipp32s
_high
,
bool
*
_ok
)
:
IPPCalcHistInvoker
(
const
Mat
&
_src
,
Mat
&
_hist
,
AutoBuffer
<
Ipp32
f
>
&
_levels
,
Ipp32s
_histSize
,
Ipp32f
_low
,
Ipp32f
_high
,
bool
*
_ok
)
:
ParallelLoopBody
(),
src
(
&
_src
),
hist
(
&
_hist
),
levels
(
&
_levels
),
histSize
(
_histSize
),
low
(
_low
),
high
(
_high
),
ok
(
_ok
)
{
*
ok
=
true
;
...
...
@@ -1189,12 +1189,54 @@ public:
virtual
void
operator
()
(
const
Range
&
range
)
const
{
Mat
phist
(
hist
->
size
(),
hist
->
type
(),
Scalar
::
all
(
0
));
#if IPP_VERSION_X100 >= 900
IppiSize
roi
=
{
src
->
cols
,
range
.
end
-
range
.
start
};
int
bufferSize
=
0
;
int
specSize
=
0
;
IppiHistogramSpec
*
pSpec
=
NULL
;
Ipp8u
*
pBuffer
=
NULL
;
IppStatus
status
=
ippiHistogramEven_8u_C1R
(
src
->
ptr
(
range
.
start
),
(
int
)
src
->
step
,
ippiSize
(
src
->
cols
,
range
.
end
-
range
.
start
),
phist
.
ptr
<
Ipp32s
>
(),
(
Ipp32s
*
)
*
levels
,
histSize
,
low
,
high
);
if
(
ippiHistogramGetBufferSize
(
ipp8u
,
roi
,
&
histSize
,
1
,
1
,
&
specSize
,
&
bufferSize
)
<
0
)
{
*
ok
=
false
;
return
;
}
pBuffer
=
(
Ipp8u
*
)
ippMalloc
(
bufferSize
);
if
(
!
pBuffer
&&
bufferSize
)
{
*
ok
=
false
;
return
;
}
pSpec
=
(
IppiHistogramSpec
*
)
ippMalloc
(
specSize
);
if
(
!
pSpec
&&
specSize
)
{
if
(
pBuffer
)
ippFree
(
pBuffer
);
*
ok
=
false
;
return
;
}
if
(
status
<
0
)
if
(
ippiHistogramUniformInit
(
ipp8u
,
(
Ipp32f
*
)
&
low
,
(
Ipp32f
*
)
&
high
,
(
Ipp32s
*
)
&
histSize
,
1
,
pSpec
)
<
0
)
{
if
(
pSpec
)
ippFree
(
pSpec
);
if
(
pBuffer
)
ippFree
(
pBuffer
);
*
ok
=
false
;
return
;
}
IppStatus
status
=
ippiHistogram_8u_C1R
(
src
->
ptr
(
range
.
start
),
(
int
)
src
->
step
,
ippiSize
(
src
->
cols
,
range
.
end
-
range
.
start
),
phist
.
ptr
<
Ipp32u
>
(),
pSpec
,
pBuffer
);
if
(
pSpec
)
ippFree
(
pSpec
);
if
(
pBuffer
)
ippFree
(
pBuffer
);
#else
CV_SUPPRESS_DEPRECATED_START
IppStatus
status
=
ippiHistogramEven_8u_C1R
(
src
->
ptr
(
range
.
start
),
(
int
)
src
->
step
,
ippiSize
(
src
->
cols
,
range
.
end
-
range
.
start
),
phist
.
ptr
<
Ipp32s
>
(),
(
Ipp32s
*
)(
Ipp32f
*
)
*
levels
,
histSize
,
(
Ipp32s
)
low
,
(
Ipp32s
)
high
);
CV_SUPPRESS_DEPRECATED_END
#endif
if
(
status
<
0
)
{
*
ok
=
false
;
return
;
...
...
@@ -1207,8 +1249,9 @@ public:
private
:
const
Mat
*
src
;
Mat
*
hist
;
AutoBuffer
<
Ipp32s
>
*
levels
;
Ipp32s
histSize
,
low
,
high
;
AutoBuffer
<
Ipp32f
>
*
levels
;
Ipp32s
histSize
;
Ipp32f
low
,
high
;
bool
*
ok
;
const
IPPCalcHistInvoker
&
operator
=
(
const
IPPCalcHistInvoker
&
);
...
...
@@ -1239,7 +1282,7 @@ static bool ipp_calchist(const Mat* images, int nimages, const int* channels,
!
accumulate
&&
uniform
)
{
ihist
.
setTo
(
Scalar
::
all
(
0
));
AutoBuffer
<
Ipp32
s
>
levels
(
histSize
[
0
]
+
1
);
AutoBuffer
<
Ipp32
f
>
levels
(
histSize
[
0
]
+
1
);
bool
ok
=
true
;
const
Mat
&
src
=
images
[
0
];
...
...
@@ -1247,7 +1290,7 @@ static bool ipp_calchist(const Mat* images, int nimages, const int* channels,
#ifdef HAVE_CONCURRENCY
nstripes
=
1
;
#endif
IPPCalcHistInvoker
invoker
(
src
,
ihist
,
levels
,
histSize
[
0
]
+
1
,
(
Ipp32s
)
ranges
[
0
][
0
],
(
Ipp32s
)
ranges
[
0
][
1
],
&
ok
);
IPPCalcHistInvoker
invoker
(
src
,
ihist
,
levels
,
histSize
[
0
]
+
1
,
ranges
[
0
][
0
],
ranges
[
0
][
1
],
&
ok
);
Range
range
(
0
,
src
.
rows
);
parallel_for_
(
range
,
invoker
,
nstripes
);
...
...
modules/imgproc/src/morph.cpp
View file @
34e4e66b
...
...
@@ -1155,18 +1155,18 @@ static bool ipp_MorphReplicate(int op, const Mat &src, Mat &dst, const Mat &kern
if
(
!
rectKernel
)
{
#if
1
#if
IPP_VERSION_X100 >= 900
if
(((
kernel
.
cols
-
1
)
/
2
!=
anchor
.
x
)
||
((
kernel
.
rows
-
1
)
/
2
!=
anchor
.
y
))
return
false
;
#define IPP_MORPH_CASE(cvtype, flavor, data_type) \
case cvtype: \
{\
int specSize = 0, bufferSize = 0;\
if (0 > ippiMorphologyBorderGetSize_##flavor(roiSize
.width
, kernelSize, &specSize, &bufferSize))\
if (0 > ippiMorphologyBorderGetSize_##flavor(roiSize, kernelSize, &specSize, &bufferSize))\
return false;\
IppiMorphState *pSpec = (IppiMorphState*)ippMalloc(specSize);\
Ipp8u *pBuffer = (Ipp8u*)ippMalloc(bufferSize);\
if (0 > ippiMorphologyBorderInit_##flavor(roiSize
.width
, kernel.ptr(), kernelSize, pSpec, pBuffer))\
if (0 > ippiMorphologyBorderInit_##flavor(roiSize, kernel.ptr(), kernelSize, pSpec, pBuffer))\
{\
ippFree(pBuffer);\
ippFree(pSpec);\
...
...
@@ -1185,34 +1185,36 @@ static bool ipp_MorphReplicate(int op, const Mat &src, Mat &dst, const Mat &kern
}\
break;
#else
IppiPoint
point
=
{
anchor
.
x
,
anchor
.
y
};
// this is case, which can be used with the anchor not in center of the kernel, but
// ippiMorphologyBorderGetSize_, ippiErodeBorderReplicate_ and ippiDilateBorderReplicate_ are deprecated.
if
(((
kernel
.
cols
-
1
)
/
2
!=
anchor
.
x
)
||
((
kernel
.
rows
-
1
)
/
2
!=
anchor
.
y
))
return
false
;
#define IPP_MORPH_CASE(cvtype, flavor, data_type) \
case cvtype: \
{\
int specSize = 0;\
int bufferSize = 0;\
if (0 > ippiMorphologyGetSize_##flavor( roiSize.width, kernel.ptr() kernelSize, &specSize))\
int specSize = 0, bufferSize = 0;\
if (0 > ippiMorphologyBorderGetSize_##flavor(roiSize.width, kernelSize, &specSize, &bufferSize))\
return false;\
bool ok = false
;\
Ipp
iMorphState* pState = (IppiMorphState*)ippMalloc(spec
Size);\
if (
ippiMorphologyInit_##flavor(roiSize.width, kernel.ptr(), kernelSize, point, pState) >= 0
)\
IppiMorphState *pSpec = (IppiMorphState*)ippMalloc(specSize)
;\
Ipp
8u *pBuffer = (Ipp8u*)ippMalloc(buffer
Size);\
if (
0 > ippiMorphologyBorderInit_##flavor(roiSize.width, kernel.ptr(), kernelSize, pSpec, pBuffer)
)\
{\
if (op == MORPH_ERODE)\
ok = ippiErodeBorderReplicate_##flavor(_src->ptr<Ipp##data_type>(), (int)_src->step[0],\
dst.ptr<Ipp##data_type>(), (int)dst.step[0],\
roiSize, ippBorderRepl, pState ) >= 0;\
else\
ok = ippiDilateBorderReplicate_##flavor(_src->ptr<Ipp##data_type>(), (int)_src->step[0],\
dst.ptr<Ipp##data_type>(), (int)dst.step[0],\
roiSize, ippBorderRepl, pState ) >= 0;\
ippFree(pBuffer);\
ippFree(pSpec);\
return false;\
}\
ippFree(pState);\
bool ok = false;\
if (op == MORPH_ERODE)\
ok = (0 <= ippiErodeBorder_##flavor(_src->ptr<Ipp##data_type>(), (int)_src->step[0], dst.ptr<Ipp##data_type>(), (int)dst.step[0],\
roiSize, ippBorderRepl, 0, pSpec, pBuffer));\
else\
ok = (0 <= ippiDilateBorder_##flavor(_src->ptr<Ipp##data_type>(), (int)_src->step[0], dst.ptr<Ipp##data_type>(), (int)dst.step[0],\
roiSize, ippBorderRepl, 0, pSpec, pBuffer));\
ippFree(pBuffer);\
ippFree(pSpec);\
return ok;\
}\
break;
#endif
CV_SUPPRESS_DEPRECATED_START
switch
(
type
)
{
IPP_MORPH_CASE
(
CV_8UC1
,
8u
_C1R
,
8u
);
...
...
@@ -1224,11 +1226,39 @@ static bool ipp_MorphReplicate(int op, const Mat &src, Mat &dst, const Mat &kern
default:
;
}
CV_SUPPRESS_DEPRECATED_END
#undef IPP_MORPH_CASE
}
else
{
#if IPP_VERSION_X100 >= 900
if
(((
kernel
.
cols
-
1
)
/
2
!=
anchor
.
x
)
||
((
kernel
.
rows
-
1
)
/
2
!=
anchor
.
y
))
// Arbitrary anchor is no longer supporeted since IPP 9.0.0
return
false
;
#define IPP_MORPH_CASE(cvtype, flavor, data_type) \
case cvtype: \
{\
if (op == MORPH_ERODE)\
{\
int bufSize = 0;\
if (0 > ippiFilterMinBorderGetBufferSize(roiSize, kernelSize, ipp##data_type, 1, &bufSize))\
return false;\
AutoBuffer<uchar> buf(bufSize + 64);\
uchar* buffer = alignPtr((uchar*)buf, 32);\
return (0 <= ippiFilterMinBorder_##flavor(_src->ptr<Ipp##data_type>(), (int)_src->step[0], dst.ptr<Ipp##data_type>(), (int)dst.step[0], roiSize, kernelSize, ippBorderRepl, 0, buffer));\
}\
else\
{\
int bufSize = 0;\
if (0 > ippiFilterMaxBorderGetBufferSize(roiSize, kernelSize, ipp##data_type, 1, &bufSize))\
return false;\
AutoBuffer<uchar> buf(bufSize + 64);\
uchar* buffer = alignPtr((uchar*)buf, 32);\
return (0 <= ippiFilterMaxBorder_##flavor(_src->ptr<Ipp##data_type>(), (int)_src->step[0], dst.ptr<Ipp##data_type>(), (int)dst.step[0], roiSize, kernelSize, ippBorderRepl, 0, buffer));\
}\
}\
break;
#else
IppiPoint
point
=
{
anchor
.
x
,
anchor
.
y
};
#define IPP_MORPH_CASE(cvtype, flavor, data_type) \
...
...
@@ -1244,7 +1274,9 @@ static bool ipp_MorphReplicate(int op, const Mat &src, Mat &dst, const Mat &kern
return (0 <= ippiFilterMaxBorderReplicate_##flavor(_src->ptr<Ipp##data_type>(), (int)_src->step[0], dst.ptr<Ipp##data_type>(), (int)dst.step[0], roiSize, kernelSize, point, buffer));\
}\
break;
#endif
CV_SUPPRESS_DEPRECATED_START
switch
(
type
)
{
IPP_MORPH_CASE
(
CV_8UC1
,
8u
_C1R
,
8u
);
...
...
@@ -1256,6 +1288,7 @@ static bool ipp_MorphReplicate(int op, const Mat &src, Mat &dst, const Mat &kern
default:
;
}
CV_SUPPRESS_DEPRECATED_END
#undef IPP_MORPH_CASE
}
#else
...
...
modules/objdetect/src/haar.cpp
View file @
34e4e66b
...
...
@@ -165,7 +165,11 @@ icvReleaseHidHaarClassifierCascade( CvHidHaarClassifierCascade** _cascade )
for
(
i
=
0
;
i
<
cascade
->
count
;
i
++
)
{
if
(
cascade
->
ipp_stages
[
i
]
)
#if IPP_VERSION_X100 < 900
ippiHaarClassifierFree_32f
(
(
IppiHaarClassifier_32f
*
)
cascade
->
ipp_stages
[
i
]
);
#else
cvFree
(
&
cascade
->
ipp_stages
[
i
]);
#endif
}
}
cvFree
(
&
cascade
->
ipp_stages
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment