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
93a81868
Commit
93a81868
authored
Jan 14, 2014
by
Ilya Lavrenov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ported cv::Canny to T-API
parent
07e08f7a
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
338 additions
and
22 deletions
+338
-22
mat.hpp
modules/core/include/opencv2/core/mat.hpp
+1
-0
mat.inl.hpp
modules/core/include/opencv2/core/mat.inl.hpp
+6
-0
operations.hpp
modules/core/include/opencv2/core/operations.hpp
+6
-0
matrix.cpp
modules/core/src/matrix.cpp
+31
-0
umatrix.cpp
modules/core/src/umatrix.cpp
+2
-1
perf_imgproc.cpp
modules/imgproc/perf/opencl/perf_imgproc.cpp
+4
-1
canny.cpp
modules/imgproc/src/canny.cpp
+161
-10
canny.cl
modules/imgproc/src/opencl/canny.cl
+0
-0
test_canny.cpp
modules/imgproc/test/ocl/test_canny.cpp
+117
-0
ocl_test.hpp
modules/ts/include/opencv2/ts/ocl_test.hpp
+10
-10
No files found.
modules/core/include/opencv2/core/mat.hpp
View file @
93a81868
...
...
@@ -127,6 +127,7 @@ public:
virtual
int
depth
(
int
i
=-
1
)
const
;
virtual
int
channels
(
int
i
=-
1
)
const
;
virtual
bool
isContinuous
(
int
i
=-
1
)
const
;
virtual
bool
isSubmatrix
(
int
i
=-
1
)
const
;
virtual
bool
empty
()
const
;
virtual
void
copyTo
(
const
_OutputArray
&
arr
)
const
;
virtual
size_t
offset
(
int
i
=-
1
)
const
;
...
...
modules/core/include/opencv2/core/mat.inl.hpp
View file @
93a81868
...
...
@@ -186,6 +186,12 @@ inline _OutputArray::_OutputArray(const Mat& m)
inline
_OutputArray
::
_OutputArray
(
const
std
::
vector
<
Mat
>&
vec
)
{
init
(
FIXED_SIZE
+
STD_VECTOR_MAT
+
ACCESS_WRITE
,
&
vec
);
}
inline
_OutputArray
::
_OutputArray
(
const
UMat
&
m
)
{
init
(
FIXED_TYPE
+
FIXED_SIZE
+
UMAT
+
ACCESS_WRITE
,
&
m
);
}
inline
_OutputArray
::
_OutputArray
(
const
std
::
vector
<
UMat
>&
vec
)
{
init
(
FIXED_SIZE
+
STD_VECTOR_UMAT
+
ACCESS_WRITE
,
&
vec
);
}
inline
_OutputArray
::
_OutputArray
(
const
cuda
::
GpuMat
&
d_mat
)
{
init
(
FIXED_TYPE
+
FIXED_SIZE
+
GPU_MAT
+
ACCESS_WRITE
,
&
d_mat
);
}
...
...
modules/core/include/opencv2/core/operations.hpp
View file @
93a81868
...
...
@@ -423,6 +423,12 @@ int print(const Mat& mtx, FILE* stream = stdout)
return
print
(
Formatter
::
get
()
->
format
(
mtx
),
stream
);
}
static
inline
int
print
(
const
UMat
&
mtx
,
FILE
*
stream
=
stdout
)
{
return
print
(
Formatter
::
get
()
->
format
(
mtx
.
getMat
(
ACCESS_READ
)),
stream
);
}
template
<
typename
_Tp
>
static
inline
int
print
(
const
std
::
vector
<
Point_
<
_Tp
>
>&
vec
,
FILE
*
stream
=
stdout
)
{
...
...
modules/core/src/matrix.cpp
View file @
93a81868
...
...
@@ -1808,6 +1808,37 @@ bool _InputArray::isContinuous(int i) const
return
false
;
}
bool
_InputArray
::
isSubmatrix
(
int
i
)
const
{
int
k
=
kind
();
if
(
k
==
MAT
)
return
i
<
0
?
((
const
Mat
*
)
obj
)
->
isSubmatrix
()
:
false
;
if
(
k
==
UMAT
)
return
i
<
0
?
((
const
UMat
*
)
obj
)
->
isSubmatrix
()
:
false
;
if
(
k
==
EXPR
||
k
==
MATX
||
k
==
STD_VECTOR
||
k
==
NONE
||
k
==
STD_VECTOR_VECTOR
)
return
false
;
if
(
k
==
STD_VECTOR_MAT
)
{
const
std
::
vector
<
Mat
>&
vv
=
*
(
const
std
::
vector
<
Mat
>*
)
obj
;
CV_Assert
((
size_t
)
i
<
vv
.
size
());
return
vv
[
i
].
isSubmatrix
();
}
if
(
k
==
STD_VECTOR_UMAT
)
{
const
std
::
vector
<
UMat
>&
vv
=
*
(
const
std
::
vector
<
UMat
>*
)
obj
;
CV_Assert
((
size_t
)
i
<
vv
.
size
());
return
vv
[
i
].
isSubmatrix
();
}
CV_Error
(
CV_StsNotImplemented
,
""
);
return
false
;
}
size_t
_InputArray
::
offset
(
int
i
)
const
{
int
k
=
kind
();
...
...
modules/core/src/umatrix.cpp
View file @
93a81868
...
...
@@ -729,11 +729,12 @@ void UMat::convertTo(OutputArray _dst, int _type, double alpha, double beta) con
doubleSupport
?
" -D DOUBLE_SUPPORT"
:
""
));
if
(
!
k
.
empty
())
{
UMat
src
=
*
this
;
_dst
.
create
(
size
(),
_type
);
UMat
dst
=
_dst
.
getUMat
();
float
alphaf
=
(
float
)
alpha
,
betaf
=
(
float
)
beta
;
k
.
args
(
ocl
::
KernelArg
::
ReadOnlyNoSize
(
*
this
),
ocl
::
KernelArg
::
WriteOnly
(
dst
,
cn
),
alphaf
,
betaf
);
k
.
args
(
ocl
::
KernelArg
::
ReadOnlyNoSize
(
src
),
ocl
::
KernelArg
::
WriteOnly
(
dst
,
cn
),
alphaf
,
betaf
);
size_t
globalsize
[
2
]
=
{
dst
.
cols
*
cn
,
dst
.
rows
};
if
(
k
.
run
(
2
,
globalsize
,
NULL
,
false
))
...
...
modules/imgproc/perf/opencl/perf_imgproc.cpp
View file @
93a81868
...
...
@@ -234,7 +234,10 @@ OCL_PERF_TEST_P(CannyFixture, Canny, ::testing::Combine(OCL_PERF_ENUM(3, 5), Boo
OCL_TEST_CYCLE
()
cv
::
Canny
(
img
,
edges
,
50.0
,
100.0
,
apertureSize
,
L2Grad
);
SANITY_CHECK
(
edges
);
if
(
apertureSize
==
3
)
SANITY_CHECK
(
edges
);
else
SANITY_CHECK_NOTHING
();
}
...
...
modules/imgproc/src/canny.cpp
View file @
93a81868
...
...
@@ -40,6 +40,7 @@
//M*/
#include "precomp.hpp"
#include "opencl_kernels.hpp"
/*
#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
...
...
@@ -48,9 +49,11 @@
#undef USE_IPP_CANNY
#endif
*/
#ifdef USE_IPP_CANNY
namespace
cv
{
#ifdef USE_IPP_CANNY
static
bool
ippCanny
(
const
Mat
&
_src
,
Mat
&
_dst
,
float
low
,
float
high
)
{
int
size
=
0
,
size1
=
0
;
...
...
@@ -83,22 +86,165 @@ static bool ippCanny(const Mat& _src, Mat& _dst, float low, float high)
return
false
;
return
true
;
}
}
#endif
static
bool
ocl_Canny
(
InputArray
_src
,
OutputArray
_dst
,
float
low_thresh
,
float
high_thresh
,
int
aperture_size
,
bool
L2gradient
,
int
cn
,
const
Size
&
size
)
{
UMat
dx
(
size
,
CV_16SC
(
cn
)),
dy
(
size
,
CV_16SC
(
cn
));
if
(
L2gradient
)
{
low_thresh
=
std
::
min
(
32767.0
f
,
low_thresh
);
high_thresh
=
std
::
min
(
32767.0
f
,
high_thresh
);
if
(
low_thresh
>
0
)
low_thresh
*=
low_thresh
;
if
(
high_thresh
>
0
)
high_thresh
*=
high_thresh
;
}
int
low
=
cvFloor
(
low_thresh
),
high
=
cvFloor
(
high_thresh
);
Size
esize
(
size
.
width
+
2
,
size
.
height
+
2
);
UMat
mag
;
size_t
globalsize
[
2
]
=
{
size
.
width
*
cn
,
size
.
height
},
localsize
[
2
]
=
{
16
,
16
};
if
(
aperture_size
==
3
&&
!
_src
.
isSubmatrix
())
{
// Sobel calculation
ocl
::
Kernel
calcSobelRowPassKernel
(
"calcSobelRowPass"
,
ocl
::
imgproc
::
canny_oclsrc
);
if
(
calcSobelRowPassKernel
.
empty
())
return
false
;
UMat
src
=
_src
.
getUMat
(),
dxBuf
(
size
,
CV_16SC
(
cn
)),
dyBuf
(
size
,
CV_16SC
(
cn
));
calcSobelRowPassKernel
.
args
(
ocl
::
KernelArg
::
ReadOnly
(
src
),
ocl
::
KernelArg
::
WriteOnlyNoSize
(
dxBuf
),
ocl
::
KernelArg
::
WriteOnlyNoSize
(
dyBuf
));
if
(
!
calcSobelRowPassKernel
.
run
(
2
,
globalsize
,
localsize
,
false
))
return
false
;
// magnitude calculation
ocl
::
Kernel
magnitudeKernel
(
"calcMagnitude_buf"
,
ocl
::
imgproc
::
canny_oclsrc
,
L2gradient
?
" -D L2GRAD"
:
""
);
if
(
magnitudeKernel
.
empty
())
return
false
;
mag
=
UMat
(
esize
,
CV_32SC
(
cn
),
Scalar
::
all
(
0
));
dx
.
create
(
size
,
CV_16SC
(
cn
));
dy
.
create
(
size
,
CV_16SC
(
cn
));
magnitudeKernel
.
args
(
ocl
::
KernelArg
::
ReadOnlyNoSize
(
dxBuf
),
ocl
::
KernelArg
::
ReadOnlyNoSize
(
dyBuf
),
ocl
::
KernelArg
::
WriteOnlyNoSize
(
dx
),
ocl
::
KernelArg
::
WriteOnlyNoSize
(
dy
),
ocl
::
KernelArg
::
WriteOnlyNoSize
(
mag
,
cn
),
size
.
height
,
size
.
width
);
if
(
!
magnitudeKernel
.
run
(
2
,
globalsize
,
localsize
,
false
))
return
false
;
}
else
{
dx
.
create
(
size
,
CV_16SC
(
cn
));
dy
.
create
(
size
,
CV_16SC
(
cn
));
Sobel
(
_src
,
dx
,
CV_16SC1
,
1
,
0
,
aperture_size
,
1
,
0
,
BORDER_REPLICATE
);
Sobel
(
_src
,
dy
,
CV_16SC1
,
0
,
1
,
aperture_size
,
1
,
0
,
BORDER_REPLICATE
);
// magnitude calculation
ocl
::
Kernel
magnitudeKernel
(
"calcMagnitude"
,
ocl
::
imgproc
::
canny_oclsrc
,
L2gradient
?
" -D L2GRAD"
:
""
);
if
(
magnitudeKernel
.
empty
())
return
false
;
mag
=
UMat
(
esize
,
CV_32SC
(
cn
),
Scalar
::
all
(
0
));
magnitudeKernel
.
args
(
ocl
::
KernelArg
::
ReadOnlyNoSize
(
dx
),
ocl
::
KernelArg
::
ReadOnlyNoSize
(
dy
),
ocl
::
KernelArg
::
WriteOnlyNoSize
(
mag
,
cn
),
size
.
height
,
size
.
width
);
if
(
!
magnitudeKernel
.
run
(
2
,
globalsize
,
NULL
,
false
))
return
false
;
}
// map calculation
ocl
::
Kernel
calcMapKernel
(
"calcMap"
,
ocl
::
imgproc
::
canny_oclsrc
);
if
(
calcMapKernel
.
empty
())
return
false
;
UMat
map
(
esize
,
CV_32SC
(
cn
));
calcMapKernel
.
args
(
ocl
::
KernelArg
::
ReadOnlyNoSize
(
dx
),
ocl
::
KernelArg
::
ReadOnlyNoSize
(
dy
),
ocl
::
KernelArg
::
ReadOnlyNoSize
(
mag
),
ocl
::
KernelArg
::
WriteOnlyNoSize
(
map
,
cn
),
size
.
height
,
size
.
width
,
low
,
high
);
if
(
!
calcMapKernel
.
run
(
2
,
globalsize
,
localsize
,
false
))
return
false
;
// local hysteresis thresholding
ocl
::
Kernel
edgesHysteresisLocalKernel
(
"edgesHysteresisLocal"
,
ocl
::
imgproc
::
canny_oclsrc
);
if
(
edgesHysteresisLocalKernel
.
empty
())
return
false
;
UMat
stack
(
1
,
size
.
area
(),
CV_16UC2
),
counter
(
1
,
1
,
CV_32SC1
,
Scalar
::
all
(
0
));
edgesHysteresisLocalKernel
.
args
(
ocl
::
KernelArg
::
ReadOnlyNoSize
(
map
),
ocl
::
KernelArg
::
PtrReadWrite
(
stack
),
ocl
::
KernelArg
::
PtrReadWrite
(
counter
),
size
.
height
,
size
.
width
);
if
(
!
edgesHysteresisLocalKernel
.
run
(
2
,
globalsize
,
localsize
,
false
))
return
false
;
// global hysteresis thresholding
UMat
stack2
(
1
,
size
.
area
(),
CV_16UC2
);
int
count
;
for
(
;
;
)
{
ocl
::
Kernel
edgesHysteresisGlobalKernel
(
"edgesHysteresisGlobal"
,
ocl
::
imgproc
::
canny_oclsrc
);
if
(
edgesHysteresisGlobalKernel
.
empty
())
return
false
;
{
Mat
_counter
=
counter
.
getMat
(
ACCESS_RW
);
count
=
_counter
.
at
<
int
>
(
0
,
0
);
if
(
count
==
0
)
break
;
_counter
.
at
<
int
>
(
0
,
0
)
=
0
;
}
edgesHysteresisGlobalKernel
.
args
(
ocl
::
KernelArg
::
ReadOnlyNoSize
(
map
),
ocl
::
KernelArg
::
PtrReadWrite
(
stack
),
ocl
::
KernelArg
::
PtrReadWrite
(
stack2
),
ocl
::
KernelArg
::
PtrReadWrite
(
counter
),
size
.
height
,
size
.
width
,
count
);
#define divUp(total, grain) ((total + grain - 1) / grain)
size_t
localsize2
[
2
]
=
{
128
,
1
},
globalsize2
[
2
]
=
{
std
::
min
(
count
,
65535
)
*
128
,
divUp
(
count
,
65535
)
};
#undef divUp
if
(
!
edgesHysteresisGlobalKernel
.
run
(
2
,
globalsize2
,
localsize2
,
false
))
return
false
;
std
::
swap
(
stack
,
stack2
);
}
// get edges
ocl
::
Kernel
getEdgesKernel
(
"getEdges"
,
ocl
::
imgproc
::
canny_oclsrc
);
if
(
getEdgesKernel
.
empty
())
return
false
;
_dst
.
create
(
size
,
CV_8UC
(
cn
));
UMat
dst
=
_dst
.
getUMat
();
getEdgesKernel
.
args
(
ocl
::
KernelArg
::
ReadOnlyNoSize
(
map
),
ocl
::
KernelArg
::
WriteOnly
(
dst
));
return
getEdgesKernel
.
run
(
2
,
globalsize
,
NULL
,
false
);
}
}
void
cv
::
Canny
(
InputArray
_src
,
OutputArray
_dst
,
double
low_thresh
,
double
high_thresh
,
int
aperture_size
,
bool
L2gradient
)
{
Mat
src
=
_src
.
getMat
(
);
CV_Assert
(
src
.
depth
()
==
CV_8U
);
const
int
type
=
_src
.
type
(),
depth
=
CV_MAT_DEPTH
(
type
),
cn
=
CV_MAT_CN
(
type
);
const
Size
size
=
_src
.
size
(
);
_dst
.
create
(
src
.
size
(),
CV_8U
);
Mat
dst
=
_dst
.
getMat
(
);
CV_Assert
(
depth
==
CV_8U
);
_dst
.
create
(
size
,
CV_8U
);
if
(
!
L2gradient
&&
(
aperture_size
&
CV_CANNY_L2_GRADIENT
)
==
CV_CANNY_L2_GRADIENT
)
{
//backward compatibility
//
backward compatibility
aperture_size
&=
~
CV_CANNY_L2_GRADIENT
;
L2gradient
=
true
;
}
...
...
@@ -109,6 +255,12 @@ void cv::Canny( InputArray _src, OutputArray _dst,
if
(
low_thresh
>
high_thresh
)
std
::
swap
(
low_thresh
,
high_thresh
);
if
(
ocl
::
useOpenCL
()
&&
_dst
.
isUMat
()
&&
cn
==
1
&&
ocl_Canny
(
_src
,
_dst
,
(
float
)
low_thresh
,
(
float
)
high_thresh
,
aperture_size
,
L2gradient
,
cn
,
size
))
return
;
Mat
src
=
_src
.
getMat
(),
dst
=
_dst
.
getMat
();
#ifdef HAVE_TEGRA_OPTIMIZATION
if
(
tegra
::
canny
(
src
,
dst
,
low_thresh
,
high_thresh
,
aperture_size
,
L2gradient
))
return
;
...
...
@@ -120,12 +272,11 @@ void cv::Canny( InputArray _src, OutputArray _dst,
return
;
#endif
const
int
cn
=
src
.
channels
();
Mat
dx
(
src
.
rows
,
src
.
cols
,
CV_16SC
(
cn
));
Mat
dy
(
src
.
rows
,
src
.
cols
,
CV_16SC
(
cn
));
Sobel
(
src
,
dx
,
CV_16S
,
1
,
0
,
aperture_size
,
1
,
0
,
cv
::
BORDER_REPLICATE
);
Sobel
(
src
,
dy
,
CV_16S
,
0
,
1
,
aperture_size
,
1
,
0
,
cv
::
BORDER_REPLICATE
);
Sobel
(
src
,
dx
,
CV_16S
,
1
,
0
,
aperture_size
,
1
,
0
,
BORDER_REPLICATE
);
Sobel
(
src
,
dy
,
CV_16S
,
0
,
1
,
aperture_size
,
1
,
0
,
BORDER_REPLICATE
);
if
(
L2gradient
)
{
...
...
modules/imgproc/src/opencl/canny.cl
0 → 100644
View file @
93a81868
This diff is collapsed.
Click to expand it.
modules/imgproc/test/ocl/test_canny.cpp
0 → 100644
View file @
93a81868
/*M///////////////////////////////////////////////////////////////////////////////////////
//
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
// By downloading, copying, installing or using the software you agree to this license.
// If you do not agree to this license, do not download, install,
// copy or use the software.
//
//
// License Agreement
// For Open Source Computer Vision Library
//
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
// Third party copyrights are property of their respective owners.
//
// @Authors
// Peng Xiao, pengxiao@multicorewareinc.com
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistribution's of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistribution's in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// * The name of the copyright holders may not be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors as is and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//M*/
#include "test_precomp.hpp"
#include "opencv2/ts/ocl_test.hpp"
#ifdef HAVE_OPENCL
namespace
cvtest
{
namespace
ocl
{
////////////////////////////////////////////////////////
// Canny
IMPLEMENT_PARAM_CLASS
(
AppertureSize
,
int
)
IMPLEMENT_PARAM_CLASS
(
L2gradient
,
bool
)
IMPLEMENT_PARAM_CLASS
(
UseRoi
,
bool
)
PARAM_TEST_CASE
(
Canny
,
AppertureSize
,
L2gradient
,
UseRoi
)
{
int
apperture_size
;
bool
useL2gradient
,
use_roi
;
TEST_DECLARE_INPUT_PARAMETER
(
src
)
TEST_DECLARE_OUTPUT_PARAMETER
(
dst
)
virtual
void
SetUp
()
{
apperture_size
=
GET_PARAM
(
0
);
useL2gradient
=
GET_PARAM
(
1
);
use_roi
=
GET_PARAM
(
2
);
}
void
generateTestData
()
{
Mat
img
=
readImage
(
"shared/fruits.png"
,
IMREAD_GRAYSCALE
);
ASSERT_FALSE
(
img
.
empty
())
<<
"cann't load shared/fruits.png"
;
Size
roiSize
=
img
.
size
();
int
type
=
img
.
type
();
ASSERT_EQ
(
CV_8UC1
,
type
);
Border
srcBorder
=
randomBorder
(
0
,
use_roi
?
MAX_VALUE
:
0
);
randomSubMat
(
src
,
src_roi
,
roiSize
,
srcBorder
,
type
,
2
,
100
);
img
.
copyTo
(
src_roi
);
Border
dstBorder
=
randomBorder
(
0
,
use_roi
?
MAX_VALUE
:
0
);
randomSubMat
(
dst
,
dst_roi
,
roiSize
,
dstBorder
,
type
,
5
,
16
);
UMAT_UPLOAD_INPUT_PARAMETER
(
src
)
UMAT_UPLOAD_OUTPUT_PARAMETER
(
dst
)
}
};
OCL_TEST_P
(
Canny
,
Accuracy
)
{
generateTestData
();
const
double
low_thresh
=
50.0
,
high_thresh
=
100.0
;
OCL_OFF
(
cv
::
Canny
(
src_roi
,
dst_roi
,
low_thresh
,
high_thresh
,
apperture_size
,
useL2gradient
));
OCL_ON
(
cv
::
Canny
(
usrc_roi
,
udst_roi
,
low_thresh
,
high_thresh
,
apperture_size
,
useL2gradient
));
EXPECT_MAT_SIMILAR
(
dst_roi
,
udst_roi
,
1e-2
);
EXPECT_MAT_SIMILAR
(
dst
,
udst
,
1e-2
);
}
OCL_INSTANTIATE_TEST_CASE_P
(
ImgProc
,
Canny
,
testing
::
Combine
(
testing
::
Values
(
AppertureSize
(
3
),
AppertureSize
(
5
)),
testing
::
Values
(
L2gradient
(
false
),
L2gradient
(
true
)),
testing
::
Values
(
UseRoi
(
false
),
UseRoi
(
true
))));
}
}
// namespace cvtest::ocl
#endif // HAVE_OPENCL
modules/ts/include/opencv2/ts/ocl_test.hpp
View file @
93a81868
...
...
@@ -96,18 +96,18 @@ extern int test_loop_times;
#define EXPECT_MAT_NEAR(mat1, mat2, eps) \
{ \
ASSERT_EQ(mat1.type(), mat2.type()); \
ASSERT_EQ(mat1.size(), mat2.size()); \
EXPECT_LE(checkNorm(mat1, mat2), eps) \
<< cv::format("Size: %d x %d", mat1.size().width, mat1.size().height
) << std::endl; \
ASSERT_EQ(mat1.type(), mat2.type()); \
ASSERT_EQ(mat1.size(), mat2.size()); \
EXPECT_LE(checkNorm(mat1, mat2), eps) \
<< "Size: " << mat1.size(
) << std::endl; \
}
#define EXPECT_MAT_NEAR_RELATIVE(mat1, mat2, eps) \
{ \
ASSERT_EQ(mat1.type(), mat2.type()); \
ASSERT_EQ(mat1.size(), mat2.size()); \
EXPECT_LE(checkNormRelative(mat1, mat2), eps) \
<< cv::format("Size: %d x %d", mat1.size().width, mat1.size().height
) << std::endl; \
ASSERT_EQ(mat1.type(), mat2.type()); \
ASSERT_EQ(mat1.size(), mat2.size()); \
EXPECT_LE(checkNormRelative(mat1, mat2), eps) \
<< "Size: " << mat1.size(
) << std::endl; \
}
#define OCL_EXPECT_MATS_NEAR(name, eps) \
...
...
@@ -134,8 +134,8 @@ extern int test_loop_times;
{ \
ASSERT_EQ(mat1.type(), mat2.type()); \
ASSERT_EQ(mat1.size(), mat2.size()); \
EXPECT_LE(checkSimilarity(mat1, mat2), eps)
;
\
<<
cv::format("Size: %d x %d", mat1.size().width, mat1.size().height
) << std::endl; \
EXPECT_LE(checkSimilarity(mat1, mat2), eps) \
<<
"Size: " << mat1.size(
) << std::endl; \
}
using
perf
::
MatDepth
;
...
...
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