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
8274ed22
Commit
8274ed22
authored
Jan 31, 2011
by
Vladislav Vinogradov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixed gpu tests (BruteForceMatcher_GPU, divide, phase, cartToPolar, async)
minor code refactoring
parent
7a29d96c
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
208 additions
and
217 deletions
+208
-217
gpu.hpp
modules/gpu/include/opencv2/gpu/gpu.hpp
+6
-4
brute_force_matcher.cpp
modules/gpu/src/brute_force_matcher.cpp
+19
-19
brute_force_matcher.cu
modules/gpu/src/cuda/brute_force_matcher.cu
+0
-0
imgproc_gpu.cpp
modules/gpu/src/imgproc_gpu.cpp
+58
-29
arithm.cpp
tests/gpu/src/arithm.cpp
+27
-14
brute_force_matcher.cpp
tests/gpu/src/brute_force_matcher.cpp
+36
-23
gputest_main.cpp
tests/gpu/src/gputest_main.cpp
+0
-1
imgproc_gpu.cpp
tests/gpu/src/imgproc_gpu.cpp
+25
-25
operator_async_call.cpp
tests/gpu/src/operator_async_call.cpp
+37
-102
No files found.
modules/gpu/include/opencv2/gpu/gpu.hpp
View file @
8274ed22
...
@@ -671,10 +671,12 @@ namespace cv
...
@@ -671,10 +671,12 @@ namespace cv
//! output will have CV_32FC1 type
//! output will have CV_32FC1 type
CV_EXPORTS
void
rectStdDev
(
const
GpuMat
&
src
,
const
GpuMat
&
sqr
,
GpuMat
&
dst
,
const
Rect
&
rect
);
CV_EXPORTS
void
rectStdDev
(
const
GpuMat
&
src
,
const
GpuMat
&
sqr
,
GpuMat
&
dst
,
const
Rect
&
rect
);
//! applies Canny edge detector and produces the edge map
// applies Canny edge detector and produces the edge map
//! supprots only CV_8UC1 source type
// disabled until fix crash
//! disabled until fix crash
//CV_EXPORTS void Canny(const GpuMat& image, GpuMat& edges, double threshold1, double threshold2, int apertureSize = 3);
CV_EXPORTS
void
Canny
(
const
GpuMat
&
image
,
GpuMat
&
edges
,
double
threshold1
,
double
threshold2
,
int
apertureSize
=
3
);
//CV_EXPORTS void Canny(const GpuMat& image, GpuMat& edges, GpuMat& buffer, double threshold1, double threshold2, int apertureSize = 3);
//CV_EXPORTS void Canny(const GpuMat& srcDx, const GpuMat& srcDy, GpuMat& edges, double threshold1, double threshold2, int apertureSize = 3);
//CV_EXPORTS void Canny(const GpuMat& srcDx, const GpuMat& srcDy, GpuMat& edges, GpuMat& buffer, double threshold1, double threshold2, int apertureSize = 3);
//! computes Harris cornerness criteria at each image pixel
//! computes Harris cornerness criteria at each image pixel
CV_EXPORTS
void
cornerHarris
(
const
GpuMat
&
src
,
GpuMat
&
dst
,
int
blockSize
,
int
ksize
,
double
k
,
int
borderType
=
BORDER_REFLECT101
);
CV_EXPORTS
void
cornerHarris
(
const
GpuMat
&
src
,
GpuMat
&
dst
,
int
blockSize
,
int
ksize
,
double
k
,
int
borderType
=
BORDER_REFLECT101
);
...
...
modules/gpu/src/brute_force_matcher.cpp
View file @
8274ed22
...
@@ -104,6 +104,18 @@ namespace cv { namespace gpu { namespace bfmatcher
...
@@ -104,6 +104,18 @@ namespace cv { namespace gpu { namespace bfmatcher
const
DevMem2D
&
mask
,
const
DevMem2Di
&
trainIdx
,
unsigned
int
*
nMatches
,
const
DevMem2Df
&
distance
);
const
DevMem2D
&
mask
,
const
DevMem2Di
&
trainIdx
,
unsigned
int
*
nMatches
,
const
DevMem2Df
&
distance
);
}}}
}}}
namespace
{
class
ImgIdxSetter
{
public
:
ImgIdxSetter
(
int
imgIdx_
)
:
imgIdx
(
imgIdx_
)
{}
void
operator
()(
DMatch
&
m
)
const
{
m
.
imgIdx
=
imgIdx
;}
private
:
int
imgIdx
;
};
}
cv
::
gpu
::
BruteForceMatcher_GPU_base
::
BruteForceMatcher_GPU_base
(
DistType
distType_
)
:
distType
(
distType_
)
cv
::
gpu
::
BruteForceMatcher_GPU_base
::
BruteForceMatcher_GPU_base
(
DistType
distType_
)
:
distType
(
distType_
)
{
{
}
}
...
@@ -185,7 +197,7 @@ void cv::gpu::BruteForceMatcher_GPU_base::matchDownload(const GpuMat& trainIdx,
...
@@ -185,7 +197,7 @@ void cv::gpu::BruteForceMatcher_GPU_base::matchDownload(const GpuMat& trainIdx,
return
;
return
;
CV_Assert
(
trainIdx
.
type
()
==
CV_32SC1
&&
trainIdx
.
isContinuous
());
CV_Assert
(
trainIdx
.
type
()
==
CV_32SC1
&&
trainIdx
.
isContinuous
());
CV_Assert
(
distance
.
type
()
==
CV_32FC1
&&
distance
.
isContinuous
()
&&
distance
.
size
().
area
()
==
trainIdx
.
size
().
area
()
);
CV_Assert
(
distance
.
type
()
==
CV_32FC1
&&
distance
.
isContinuous
()
&&
distance
.
cols
==
trainIdx
.
cols
);
const
int
nQuery
=
trainIdx
.
cols
;
const
int
nQuery
=
trainIdx
.
cols
;
...
@@ -309,8 +321,8 @@ void cv::gpu::BruteForceMatcher_GPU_base::matchDownload(const GpuMat& trainIdx,
...
@@ -309,8 +321,8 @@ void cv::gpu::BruteForceMatcher_GPU_base::matchDownload(const GpuMat& trainIdx,
return
;
return
;
CV_Assert
(
trainIdx
.
type
()
==
CV_32SC1
&&
trainIdx
.
isContinuous
());
CV_Assert
(
trainIdx
.
type
()
==
CV_32SC1
&&
trainIdx
.
isContinuous
());
CV_Assert
(
imgIdx
.
type
()
==
CV_32SC1
&&
imgIdx
.
isContinuous
());
CV_Assert
(
imgIdx
.
type
()
==
CV_32SC1
&&
imgIdx
.
isContinuous
()
&&
imgIdx
.
cols
==
trainIdx
.
cols
);
CV_Assert
(
distance
.
type
()
==
CV_32FC1
&&
distance
.
isContinuous
());
CV_Assert
(
distance
.
type
()
==
CV_32FC1
&&
distance
.
isContinuous
()
&&
imgIdx
.
cols
==
trainIdx
.
cols
);
const
int
nQuery
=
trainIdx
.
cols
;
const
int
nQuery
=
trainIdx
.
cols
;
...
@@ -390,7 +402,7 @@ void cv::gpu::BruteForceMatcher_GPU_base::knnMatch(const GpuMat& queryDescs, con
...
@@ -390,7 +402,7 @@ void cv::gpu::BruteForceMatcher_GPU_base::knnMatch(const GpuMat& queryDescs, con
trainIdx
.
setTo
(
Scalar
::
all
(
-
1
));
trainIdx
.
setTo
(
Scalar
::
all
(
-
1
));
distance
.
create
(
nQuery
,
k
,
CV_32F
);
distance
.
create
(
nQuery
,
k
,
CV_32F
);
allDist
.
create
(
nQuery
,
nTrain
,
CV_32F
);
ensureSizeIsEnough
(
nQuery
,
nTrain
,
CV_32FC1
,
allDist
);
match_caller_t
func
=
match_callers
[
distType
][
queryDescs
.
depth
()];
match_caller_t
func
=
match_callers
[
distType
][
queryDescs
.
depth
()];
CV_Assert
(
func
!=
0
);
CV_Assert
(
func
!=
0
);
...
@@ -451,18 +463,6 @@ void cv::gpu::BruteForceMatcher_GPU_base::knnMatch(const GpuMat& queryDescs, con
...
@@ -451,18 +463,6 @@ void cv::gpu::BruteForceMatcher_GPU_base::knnMatch(const GpuMat& queryDescs, con
knnMatchDownload
(
trainIdx
,
distance
,
matches
,
compactResult
);
knnMatchDownload
(
trainIdx
,
distance
,
matches
,
compactResult
);
}
}
namespace
{
class
ImgIdxSetter
{
public
:
ImgIdxSetter
(
int
imgIdx_
)
:
imgIdx
(
imgIdx_
)
{}
void
operator
()(
DMatch
&
m
)
const
{
m
.
imgIdx
=
imgIdx
;}
private
:
int
imgIdx
;
};
}
void
cv
::
gpu
::
BruteForceMatcher_GPU_base
::
knnMatch
(
const
GpuMat
&
queryDescs
,
void
cv
::
gpu
::
BruteForceMatcher_GPU_base
::
knnMatch
(
const
GpuMat
&
queryDescs
,
vector
<
vector
<
DMatch
>
>&
matches
,
int
knn
,
const
vector
<
GpuMat
>&
masks
,
bool
compactResult
)
vector
<
vector
<
DMatch
>
>&
matches
,
int
knn
,
const
vector
<
GpuMat
>&
masks
,
bool
compactResult
)
{
{
...
@@ -538,9 +538,9 @@ void cv::gpu::BruteForceMatcher_GPU_base::radiusMatch(const GpuMat& queryDescs,
...
@@ -538,9 +538,9 @@ void cv::gpu::BruteForceMatcher_GPU_base::radiusMatch(const GpuMat& queryDescs,
CV_Assert
(
queryDescs
.
channels
()
==
1
&&
queryDescs
.
depth
()
<
CV_64F
);
CV_Assert
(
queryDescs
.
channels
()
==
1
&&
queryDescs
.
depth
()
<
CV_64F
);
CV_Assert
(
trainDescs
.
type
()
==
queryDescs
.
type
()
&&
trainDescs
.
cols
==
queryDescs
.
cols
);
CV_Assert
(
trainDescs
.
type
()
==
queryDescs
.
type
()
&&
trainDescs
.
cols
==
queryDescs
.
cols
);
CV_Assert
(
trainIdx
.
empty
()
||
trainIdx
.
rows
==
nQuery
);
CV_Assert
(
trainIdx
.
empty
()
||
(
trainIdx
.
rows
==
nQuery
&&
trainIdx
.
size
()
==
distance
.
size
())
);
nMatches
.
create
(
1
,
nQuery
,
CV_32SC1
);
ensureSizeIsEnough
(
1
,
nQuery
,
CV_32SC1
,
nMatches
);
nMatches
.
setTo
(
Scalar
::
all
(
0
));
nMatches
.
setTo
(
Scalar
::
all
(
0
));
if
(
trainIdx
.
empty
())
if
(
trainIdx
.
empty
())
{
{
...
@@ -561,7 +561,7 @@ void cv::gpu::BruteForceMatcher_GPU_base::radiusMatchDownload(const GpuMat& trai
...
@@ -561,7 +561,7 @@ void cv::gpu::BruteForceMatcher_GPU_base::radiusMatchDownload(const GpuMat& trai
return
;
return
;
CV_Assert
(
trainIdx
.
type
()
==
CV_32SC1
);
CV_Assert
(
trainIdx
.
type
()
==
CV_32SC1
);
CV_Assert
(
nMatches
.
type
()
==
CV_32SC1
&&
nMatches
.
isContinuous
()
&&
nMatches
.
size
().
area
()
=
=
trainIdx
.
rows
);
CV_Assert
(
nMatches
.
type
()
==
CV_32SC1
&&
nMatches
.
isContinuous
()
&&
nMatches
.
cols
>
=
trainIdx
.
rows
);
CV_Assert
(
distance
.
type
()
==
CV_32FC1
&&
distance
.
size
()
==
trainIdx
.
size
());
CV_Assert
(
distance
.
type
()
==
CV_32FC1
&&
distance
.
size
()
==
trainIdx
.
size
());
const
int
nQuery
=
trainIdx
.
rows
;
const
int
nQuery
=
trainIdx
.
rows
;
...
...
modules/gpu/src/cuda/brute_force_matcher.cu
View file @
8274ed22
This diff is collapsed.
Click to expand it.
modules/gpu/src/imgproc_gpu.cpp
View file @
8274ed22
...
@@ -66,7 +66,10 @@ void cv::gpu::integral(const GpuMat&, GpuMat&, GpuMat&) { throw_nogpu(); }
...
@@ -66,7 +66,10 @@ void cv::gpu::integral(const GpuMat&, GpuMat&, GpuMat&) { throw_nogpu(); }
void
cv
::
gpu
::
sqrIntegral
(
const
GpuMat
&
,
GpuMat
&
)
{
throw_nogpu
();
}
void
cv
::
gpu
::
sqrIntegral
(
const
GpuMat
&
,
GpuMat
&
)
{
throw_nogpu
();
}
void
cv
::
gpu
::
columnSum
(
const
GpuMat
&
,
GpuMat
&
)
{
throw_nogpu
();
}
void
cv
::
gpu
::
columnSum
(
const
GpuMat
&
,
GpuMat
&
)
{
throw_nogpu
();
}
void
cv
::
gpu
::
rectStdDev
(
const
GpuMat
&
,
const
GpuMat
&
,
GpuMat
&
,
const
Rect
&
)
{
throw_nogpu
();
}
void
cv
::
gpu
::
rectStdDev
(
const
GpuMat
&
,
const
GpuMat
&
,
GpuMat
&
,
const
Rect
&
)
{
throw_nogpu
();
}
void
cv
::
gpu
::
Canny
(
const
GpuMat
&
,
GpuMat
&
,
double
,
double
,
int
)
{
throw_nogpu
();
}
//void cv::gpu::Canny(const GpuMat&, GpuMat&, double, double, int) { throw_nogpu(); }
//void cv::gpu::Canny(const GpuMat&, GpuMat&, GpuMat&, double, double, int) { throw_nogpu(); }
//void cv::gpu::Canny(const GpuMat&, const GpuMat&, GpuMat&, GpuMat&, double, double, int) { throw_nogpu(); }
//void cv::gpu::Canny(const GpuMat&, const GpuMat&, GpuMat&, GpuMat&, GpuMat&, double, double, int) { throw_nogpu(); }
void
cv
::
gpu
::
evenLevels
(
GpuMat
&
,
int
,
int
,
int
)
{
throw_nogpu
();
}
void
cv
::
gpu
::
evenLevels
(
GpuMat
&
,
int
,
int
,
int
)
{
throw_nogpu
();
}
void
cv
::
gpu
::
histEven
(
const
GpuMat
&
,
GpuMat
&
,
int
,
int
,
int
)
{
throw_nogpu
();
}
void
cv
::
gpu
::
histEven
(
const
GpuMat
&
,
GpuMat
&
,
int
,
int
,
int
)
{
throw_nogpu
();
}
void
cv
::
gpu
::
histEven
(
const
GpuMat
&
,
GpuMat
*
,
int
*
,
int
*
,
int
*
)
{
throw_nogpu
();
}
void
cv
::
gpu
::
histEven
(
const
GpuMat
&
,
GpuMat
*
,
int
*
,
int
*
,
int
*
)
{
throw_nogpu
();
}
...
@@ -655,34 +658,60 @@ void cv::gpu::rectStdDev(const GpuMat& src, const GpuMat& sqr, GpuMat& dst, cons
...
@@ -655,34 +658,60 @@ void cv::gpu::rectStdDev(const GpuMat& src, const GpuMat& sqr, GpuMat& dst, cons
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
// Canny
// Canny
void
cv
::
gpu
::
Canny
(
const
GpuMat
&
image
,
GpuMat
&
edges
,
double
threshold1
,
double
threshold2
,
int
apertureSize
)
//void cv::gpu::Canny(const GpuMat& image, GpuMat& edges, double threshold1, double threshold2, int apertureSize)
{
//{
CV_Assert
(
!
"disabled until fix crash"
);
// CV_Assert(!"disabled until fix crash");
CV_Assert
(
image
.
type
()
==
CV_8UC1
);
//
// GpuMat srcDx, srcDy;
GpuMat
srcDx
,
srcDy
;
//
// Sobel(image, srcDx, CV_32F, 1, 0, apertureSize);
Sobel
(
image
,
srcDx
,
-
1
,
1
,
0
,
apertureSize
);
// Sobel(image, srcDy, CV_32F, 0, 1, apertureSize);
Sobel
(
image
,
srcDy
,
-
1
,
0
,
1
,
apertureSize
);
//
// GpuMat buf;
srcDx
.
convertTo
(
srcDx
,
CV_32F
);
//
srcDy
.
convertTo
(
srcDy
,
CV_32F
);
// Canny(srcDx, srcDy, edges, buf, threshold1, threshold2, apertureSize);
//}
edges
.
create
(
image
.
size
(),
CV_8UC1
);
//
//void cv::gpu::Canny(const GpuMat& image, GpuMat& edges, GpuMat& buf, double threshold1, double threshold2, int apertureSize)
NppiSize
sz
;
//{
sz
.
height
=
image
.
rows
;
// CV_Assert(!"disabled until fix crash");
sz
.
width
=
image
.
cols
;
//
// GpuMat srcDx, srcDy;
int
bufsz
;
//
nppSafeCall
(
nppiCannyGetBufferSize
(
sz
,
&
bufsz
)
);
// Sobel(image, srcDx, CV_32F, 1, 0, apertureSize);
GpuMat
buf
(
1
,
bufsz
,
CV_8UC1
);
// Sobel(image, srcDy, CV_32F, 0, 1, apertureSize);
//
nppSafeCall
(
nppiCanny_32f8u_C1R
(
srcDx
.
ptr
<
Npp32f
>
(),
srcDx
.
step
,
srcDy
.
ptr
<
Npp32f
>
(),
srcDy
.
step
,
// Canny(srcDx, srcDy, edges, buf, threshold1, threshold2, apertureSize);
edges
.
ptr
<
Npp8u
>
(),
edges
.
step
,
sz
,
(
Npp32f
)
threshold1
,
(
Npp32f
)
threshold2
,
buf
.
ptr
<
Npp8u
>
())
);
//}
//
cudaSafeCall
(
cudaThreadSynchronize
()
);
//void cv::gpu::Canny(const GpuMat& srcDx, const GpuMat& srcDy, GpuMat& edges, double threshold1, double threshold2, int apertureSize)
}
//{
// CV_Assert(!"disabled until fix crash");
//
// GpuMat buf;
// Canny(srcDx, srcDy, edges, buf, threshold1, threshold2, apertureSize);
//}
//
//void cv::gpu::Canny(const GpuMat& srcDx, const GpuMat& srcDy, GpuMat& edges, GpuMat& buf, double threshold1, double threshold2, int apertureSize)
//{
// CV_Assert(!"disabled until fix crash");
// CV_Assert(srcDx.type() == CV_32FC1 && srcDy.type() == CV_32FC1 && srcDx.size() == srcDy.size());
//
// edges.create(srcDx.size(), CV_8UC1);
//
// NppiSize sz;
// sz.height = srcDx.rows;
// sz.width = srcDx.cols;
//
// int bufsz;
// nppSafeCall( nppiCannyGetBufferSize(sz, &bufsz) );
// ensureSizeIsEnough(1, bufsz, CV_8UC1, buf);
//
// nppSafeCall( nppiCanny_32f8u_C1R(srcDx.ptr<Npp32f>(), srcDx.step, srcDy.ptr<Npp32f>(), srcDy.step,
// edges.ptr<Npp8u>(), edges.step, sz, (Npp32f)threshold1, (Npp32f)threshold2, buf.ptr<Npp8u>()) );
//
// cudaSafeCall( cudaThreadSynchronize() );
//}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
// Histogram
// Histogram
...
...
tests/gpu/src/arithm.cpp
View file @
8274ed22
...
@@ -66,45 +66,58 @@ protected:
...
@@ -66,45 +66,58 @@ protected:
virtual
int
test
(
const
Mat
&
mat1
,
const
Mat
&
mat2
)
=
0
;
virtual
int
test
(
const
Mat
&
mat1
,
const
Mat
&
mat2
)
=
0
;
int
CheckNorm
(
const
Mat
&
m1
,
const
Mat
&
m2
);
int
CheckNorm
(
const
Mat
&
m1
,
const
Mat
&
m2
,
double
eps
=
1e-5
);
int
CheckNorm
(
const
Scalar
&
s1
,
const
Scalar
&
s2
);
int
CheckNorm
(
const
Scalar
&
s1
,
const
Scalar
&
s2
,
double
eps
=
1e-5
);
int
CheckNorm
(
double
d1
,
double
d2
);
int
CheckNorm
(
double
d1
,
double
d2
,
double
eps
=
1e-5
);
};
};
int
CV_GpuArithmTest
::
test
(
int
type
)
int
CV_GpuArithmTest
::
test
(
int
type
)
{
{
cv
::
Size
sz
(
200
,
200
);
cv
::
Size
sz
(
200
,
200
);
cv
::
Mat
mat1
(
sz
,
type
),
mat2
(
sz
,
type
);
cv
::
Mat
mat1
(
sz
,
type
),
mat2
(
sz
,
type
);
cv
::
RNG
rng
(
*
ts
->
get_rng
());
cv
::
RNG
rng
(
*
ts
->
get_rng
());
rng
.
fill
(
mat1
,
cv
::
RNG
::
UNIFORM
,
cv
::
Scalar
::
all
(
1
),
cv
::
Scalar
::
all
(
20
));
rng
.
fill
(
mat2
,
cv
::
RNG
::
UNIFORM
,
cv
::
Scalar
::
all
(
1
),
cv
::
Scalar
::
all
(
20
));
if
(
type
!=
CV_32FC1
)
{
rng
.
fill
(
mat1
,
cv
::
RNG
::
UNIFORM
,
cv
::
Scalar
::
all
(
1
),
cv
::
Scalar
::
all
(
20
));
rng
.
fill
(
mat2
,
cv
::
RNG
::
UNIFORM
,
cv
::
Scalar
::
all
(
1
),
cv
::
Scalar
::
all
(
20
));
}
else
{
rng
.
fill
(
mat1
,
cv
::
RNG
::
UNIFORM
,
cv
::
Scalar
::
all
(
0.1
),
cv
::
Scalar
::
all
(
1.0
));
rng
.
fill
(
mat2
,
cv
::
RNG
::
UNIFORM
,
cv
::
Scalar
::
all
(
0.1
),
cv
::
Scalar
::
all
(
1.0
));
}
return
test
(
mat1
,
mat2
);
return
test
(
mat1
,
mat2
);
}
}
int
CV_GpuArithmTest
::
CheckNorm
(
const
Mat
&
m1
,
const
Mat
&
m2
)
int
CV_GpuArithmTest
::
CheckNorm
(
const
Mat
&
m1
,
const
Mat
&
m2
,
double
eps
)
{
{
double
ret
=
norm
(
m1
,
m2
,
NORM_INF
);
double
ret
=
norm
(
m1
,
m2
,
NORM_INF
);
if
(
ret
<
1e-5
)
if
(
ret
<
eps
)
return
CvTS
::
OK
;
return
CvTS
::
OK
;
ts
->
printf
(
CvTS
::
LOG
,
"
\n
Norm: %f
\n
"
,
ret
);
ts
->
printf
(
CvTS
::
LOG
,
"
\n
Norm: %f
\n
"
,
ret
);
return
CvTS
::
FAIL_GENERIC
;
return
CvTS
::
FAIL_GENERIC
;
}
}
int
CV_GpuArithmTest
::
CheckNorm
(
const
Scalar
&
s1
,
const
Scalar
&
s2
)
int
CV_GpuArithmTest
::
CheckNorm
(
const
Scalar
&
s1
,
const
Scalar
&
s2
,
double
eps
)
{
{
double
ret0
=
CheckNorm
(
s1
[
0
],
s2
[
0
]),
ret1
=
CheckNorm
(
s1
[
1
],
s2
[
1
]),
ret2
=
CheckNorm
(
s1
[
2
],
s2
[
2
]),
ret3
=
CheckNorm
(
s1
[
3
],
s2
[
3
]);
int
ret0
=
CheckNorm
(
s1
[
0
],
s2
[
0
],
eps
),
ret1
=
CheckNorm
(
s1
[
1
],
s2
[
1
],
eps
),
ret2
=
CheckNorm
(
s1
[
2
],
s2
[
2
],
eps
),
ret3
=
CheckNorm
(
s1
[
3
],
s2
[
3
],
eps
);
return
(
ret0
==
CvTS
::
OK
&&
ret1
==
CvTS
::
OK
&&
ret2
==
CvTS
::
OK
&&
ret3
==
CvTS
::
OK
)
?
CvTS
::
OK
:
CvTS
::
FAIL_GENERIC
;
return
(
ret0
==
CvTS
::
OK
&&
ret1
==
CvTS
::
OK
&&
ret2
==
CvTS
::
OK
&&
ret3
==
CvTS
::
OK
)
?
CvTS
::
OK
:
CvTS
::
FAIL_GENERIC
;
}
}
int
CV_GpuArithmTest
::
CheckNorm
(
double
d1
,
double
d2
)
int
CV_GpuArithmTest
::
CheckNorm
(
double
d1
,
double
d2
,
double
eps
)
{
{
double
ret
=
::
fabs
(
d1
-
d2
);
double
ret
=
::
fabs
(
d1
-
d2
);
if
(
ret
<
1e-5
)
if
(
ret
<
eps
)
return
CvTS
::
OK
;
return
CvTS
::
OK
;
ts
->
printf
(
CvTS
::
LOG
,
"
\n
Norm: %f
\n
"
,
ret
);
ts
->
printf
(
CvTS
::
LOG
,
"
\n
Norm: %f
\n
"
,
ret
);
...
@@ -245,7 +258,7 @@ struct CV_GpuNppImageDivideTest : public CV_GpuArithmTest
...
@@ -245,7 +258,7 @@ struct CV_GpuNppImageDivideTest : public CV_GpuArithmTest
GpuMat
gpuRes
;
GpuMat
gpuRes
;
cv
::
gpu
::
divide
(
gpu1
,
gpu2
,
gpuRes
);
cv
::
gpu
::
divide
(
gpu1
,
gpu2
,
gpuRes
);
return
CheckNorm
(
cpuRes
,
gpuRes
);
return
CheckNorm
(
cpuRes
,
gpuRes
,
1.01
f
);
}
}
};
};
...
@@ -584,7 +597,7 @@ struct CV_GpuNppImagePhaseTest : public CV_GpuArithmTest
...
@@ -584,7 +597,7 @@ struct CV_GpuNppImagePhaseTest : public CV_GpuArithmTest
GpuMat
gpuRes
;
GpuMat
gpuRes
;
cv
::
gpu
::
phase
(
gpu1
,
gpu2
,
gpuRes
,
true
);
cv
::
gpu
::
phase
(
gpu1
,
gpu2
,
gpuRes
,
true
);
return
CheckNorm
(
cpuRes
,
gpuRes
);
return
CheckNorm
(
cpuRes
,
gpuRes
,
0.3
f
);
}
}
};
};
...
@@ -611,7 +624,7 @@ struct CV_GpuNppImageCartToPolarTest : public CV_GpuArithmTest
...
@@ -611,7 +624,7 @@ struct CV_GpuNppImageCartToPolarTest : public CV_GpuArithmTest
cv
::
gpu
::
cartToPolar
(
gpu1
,
gpu2
,
gpuMag
,
gpuAngle
);
cv
::
gpu
::
cartToPolar
(
gpu1
,
gpu2
,
gpuMag
,
gpuAngle
);
int
magRes
=
CheckNorm
(
cpuMag
,
gpuMag
);
int
magRes
=
CheckNorm
(
cpuMag
,
gpuMag
);
int
angleRes
=
CheckNorm
(
cpuAngle
,
gpuAngle
);
int
angleRes
=
CheckNorm
(
cpuAngle
,
gpuAngle
,
0.005
f
);
return
magRes
==
CvTS
::
OK
&&
angleRes
==
CvTS
::
OK
?
CvTS
::
OK
:
CvTS
::
FAIL_GENERIC
;
return
magRes
==
CvTS
::
OK
&&
angleRes
==
CvTS
::
OK
?
CvTS
::
OK
:
CvTS
::
FAIL_GENERIC
;
}
}
...
...
tests/gpu/src/brute_force_matcher.cpp
View file @
8274ed22
...
@@ -51,24 +51,27 @@ class CV_GpuBruteForceMatcherTest : public CvTest
...
@@ -51,24 +51,27 @@ class CV_GpuBruteForceMatcherTest : public CvTest
{
{
public
:
public
:
CV_GpuBruteForceMatcherTest
()
:
CV_GpuBruteForceMatcherTest
()
:
CvTest
(
"GPU-BruteForceMatcher"
,
"BruteForceMatcher"
)
,
badPart
(
0.01
f
)
CvTest
(
"GPU-BruteForceMatcher"
,
"BruteForceMatcher"
)
{
{
}
}
protected
:
static
const
int
dim
=
500
;
static
const
int
queryDescCount
=
300
;
// must be even number because we split train data in some cases in two
static
const
int
countFactor
=
4
;
// do not change it
const
float
badPart
;
protected
:
virtual
void
run
(
int
);
virtual
void
run
(
int
);
void
generateData
(
GpuMat
&
query
,
GpuMat
&
train
);
void
emptyDataTest
();
void
emptyDataTest
();
void
dataTest
(
int
dim
);
void
generateData
(
GpuMat
&
query
,
GpuMat
&
train
,
int
dim
);
void
matchTest
(
const
GpuMat
&
query
,
const
GpuMat
&
train
);
void
matchTest
(
const
GpuMat
&
query
,
const
GpuMat
&
train
);
void
knnMatchTest
(
const
GpuMat
&
query
,
const
GpuMat
&
train
);
void
knnMatchTest
(
const
GpuMat
&
query
,
const
GpuMat
&
train
);
void
radiusMatchTest
(
const
GpuMat
&
query
,
const
GpuMat
&
train
);
void
radiusMatchTest
(
const
GpuMat
&
query
,
const
GpuMat
&
train
);
private
:
BruteForceMatcher_GPU
<
L2
<
float
>
>
dmatcher
;
BruteForceMatcher_GPU
<
L2
<
float
>
>
dmatcher
;
static
const
int
queryDescCount
=
300
;
// must be even number because we split train data in some cases in two
static
const
int
countFactor
=
4
;
// do not change it
};
};
void
CV_GpuBruteForceMatcherTest
::
emptyDataTest
()
void
CV_GpuBruteForceMatcherTest
::
emptyDataTest
()
...
@@ -150,7 +153,7 @@ void CV_GpuBruteForceMatcherTest::emptyDataTest()
...
@@ -150,7 +153,7 @@ void CV_GpuBruteForceMatcherTest::emptyDataTest()
}
}
void
CV_GpuBruteForceMatcherTest
::
generateData
(
GpuMat
&
queryGPU
,
GpuMat
&
trainGPU
)
void
CV_GpuBruteForceMatcherTest
::
generateData
(
GpuMat
&
queryGPU
,
GpuMat
&
trainGPU
,
int
dim
)
{
{
Mat
query
,
train
;
Mat
query
,
train
;
RNG
rng
(
*
ts
->
get_rng
());
RNG
rng
(
*
ts
->
get_rng
());
...
@@ -209,7 +212,7 @@ void CV_GpuBruteForceMatcherTest::matchTest( const GpuMat& query, const GpuMat&
...
@@ -209,7 +212,7 @@ void CV_GpuBruteForceMatcherTest::matchTest( const GpuMat& query, const GpuMat&
if
(
(
match
.
queryIdx
!=
(
int
)
i
)
||
(
match
.
trainIdx
!=
(
int
)
i
*
countFactor
)
||
(
match
.
imgIdx
!=
0
)
)
if
(
(
match
.
queryIdx
!=
(
int
)
i
)
||
(
match
.
trainIdx
!=
(
int
)
i
*
countFactor
)
||
(
match
.
imgIdx
!=
0
)
)
badCount
++
;
badCount
++
;
}
}
if
(
(
float
)
badCount
>
(
float
)
queryDescCount
*
badPart
)
if
(
badCount
>
0
)
{
{
ts
->
printf
(
CvTS
::
LOG
,
"%f - too large bad matches part while test match() function (1).
\n
"
,
ts
->
printf
(
CvTS
::
LOG
,
"%f - too large bad matches part while test match() function (1).
\n
"
,
(
float
)
badCount
/
(
float
)
queryDescCount
);
(
float
)
badCount
/
(
float
)
queryDescCount
);
...
@@ -260,7 +263,7 @@ void CV_GpuBruteForceMatcherTest::matchTest( const GpuMat& query, const GpuMat&
...
@@ -260,7 +263,7 @@ void CV_GpuBruteForceMatcherTest::matchTest( const GpuMat& query, const GpuMat&
}
}
}
}
}
}
if
(
(
float
)
badCount
>
(
float
)
queryDescCount
*
badPart
)
if
(
badCount
>
0
)
{
{
ts
->
printf
(
CvTS
::
LOG
,
"%f - too large bad matches part while test match() function (2).
\n
"
,
ts
->
printf
(
CvTS
::
LOG
,
"%f - too large bad matches part while test match() function (2).
\n
"
,
(
float
)
badCount
/
(
float
)
queryDescCount
);
(
float
)
badCount
/
(
float
)
queryDescCount
);
...
@@ -305,7 +308,7 @@ void CV_GpuBruteForceMatcherTest::knnMatchTest( const GpuMat& query, const GpuMa
...
@@ -305,7 +308,7 @@ void CV_GpuBruteForceMatcherTest::knnMatchTest( const GpuMat& query, const GpuMa
badCount
+=
localBadCount
>
0
?
1
:
0
;
badCount
+=
localBadCount
>
0
?
1
:
0
;
}
}
}
}
if
(
(
float
)
badCount
>
(
float
)
queryDescCount
*
badPart
)
if
(
badCount
>
0
)
{
{
ts
->
printf
(
CvTS
::
LOG
,
"%f - too large bad matches part while test knnMatch() function (1).
\n
"
,
ts
->
printf
(
CvTS
::
LOG
,
"%f - too large bad matches part while test knnMatch() function (1).
\n
"
,
(
float
)
badCount
/
(
float
)
queryDescCount
);
(
float
)
badCount
/
(
float
)
queryDescCount
);
...
@@ -369,7 +372,7 @@ void CV_GpuBruteForceMatcherTest::knnMatchTest( const GpuMat& query, const GpuMa
...
@@ -369,7 +372,7 @@ void CV_GpuBruteForceMatcherTest::knnMatchTest( const GpuMat& query, const GpuMa
badCount
+=
localBadCount
>
0
?
1
:
0
;
badCount
+=
localBadCount
>
0
?
1
:
0
;
}
}
}
}
if
(
(
float
)
badCount
>
(
float
)
queryDescCount
*
badPart
)
if
(
badCount
>
0
)
{
{
ts
->
printf
(
CvTS
::
LOG
,
"%f - too large bad matches part while test knnMatch() function (2).
\n
"
,
ts
->
printf
(
CvTS
::
LOG
,
"%f - too large bad matches part while test knnMatch() function (2).
\n
"
,
(
float
)
badCount
/
(
float
)
queryDescCount
);
(
float
)
badCount
/
(
float
)
queryDescCount
);
...
@@ -407,7 +410,7 @@ void CV_GpuBruteForceMatcherTest::radiusMatchTest( const GpuMat& query, const Gp
...
@@ -407,7 +410,7 @@ void CV_GpuBruteForceMatcherTest::radiusMatchTest( const GpuMat& query, const Gp
badCount
++
;
badCount
++
;
}
}
}
}
if
(
(
float
)
badCount
>
(
float
)
queryDescCount
*
badPart
)
if
(
badCount
>
0
)
{
{
ts
->
printf
(
CvTS
::
LOG
,
"%f - too large bad matches part while test radiusMatch() function (1).
\n
"
,
ts
->
printf
(
CvTS
::
LOG
,
"%f - too large bad matches part while test radiusMatch() function (1).
\n
"
,
(
float
)
badCount
/
(
float
)
queryDescCount
);
(
float
)
badCount
/
(
float
)
queryDescCount
);
...
@@ -473,7 +476,8 @@ void CV_GpuBruteForceMatcherTest::radiusMatchTest( const GpuMat& query, const Gp
...
@@ -473,7 +476,8 @@ void CV_GpuBruteForceMatcherTest::radiusMatchTest( const GpuMat& query, const Gp
badCount
+=
localBadCount
>
0
?
1
:
0
;
badCount
+=
localBadCount
>
0
?
1
:
0
;
}
}
}
}
if
(
(
float
)
badCount
>
(
float
)
queryDescCount
*
badPart
)
if
(
badCount
>
0
)
{
{
curRes
=
CvTS
::
FAIL_INVALID_OUTPUT
;
curRes
=
CvTS
::
FAIL_INVALID_OUTPUT
;
ts
->
printf
(
CvTS
::
LOG
,
"%f - too large bad matches part while test radiusMatch() function (2).
\n
"
,
ts
->
printf
(
CvTS
::
LOG
,
"%f - too large bad matches part while test radiusMatch() function (2).
\n
"
,
...
@@ -483,20 +487,29 @@ void CV_GpuBruteForceMatcherTest::radiusMatchTest( const GpuMat& query, const Gp
...
@@ -483,20 +487,29 @@ void CV_GpuBruteForceMatcherTest::radiusMatchTest( const GpuMat& query, const Gp
}
}
}
}
void
CV_GpuBruteForceMatcherTest
::
run
(
int
)
void
CV_GpuBruteForceMatcherTest
::
dataTest
(
int
dim
)
{
{
emptyDataTest
();
GpuMat
query
,
train
;
GpuMat
query
,
train
;
generateData
(
query
,
train
);
generateData
(
query
,
train
,
dim
);
matchTest
(
query
,
train
);
matchTest
(
query
,
train
);
knnMatchTest
(
query
,
train
);
radiusMatchTest
(
query
,
train
);
knnMatchTest
(
query
,
train
);
dmatcher
.
clear
();
}
radiusMatchTest
(
query
,
train
);
void
CV_GpuBruteForceMatcherTest
::
run
(
int
)
{
emptyDataTest
();
dmatcher
.
clear
();
dataTest
(
50
);
dataTest
(
64
);
dataTest
(
100
);
dataTest
(
128
);
dataTest
(
200
);
dataTest
(
256
);
dataTest
(
300
);
}
}
CV_GpuBruteForceMatcherTest
CV_GpuBruteForceMatcher_test
;
CV_GpuBruteForceMatcherTest
CV_GpuBruteForceMatcher_test
;
tests/gpu/src/gputest_main.cpp
View file @
8274ed22
...
@@ -45,7 +45,6 @@ CvTS test_system("gpu");
...
@@ -45,7 +45,6 @@ CvTS test_system("gpu");
const
char
*
blacklist
[]
=
const
char
*
blacklist
[]
=
{
{
"GPU-AsyncGpuMatOperator"
,
// crash
"GPU-NppImageCanny"
,
// NPP_TEXTURE_BIND_ERROR
"GPU-NppImageCanny"
,
// NPP_TEXTURE_BIND_ERROR
0
0
};
};
...
...
tests/gpu/src/imgproc_gpu.cpp
View file @
8274ed22
...
@@ -408,30 +408,30 @@ struct CV_GpuNppImageIntegralTest : public CV_GpuImageProcTest
...
@@ -408,30 +408,30 @@ struct CV_GpuNppImageIntegralTest : public CV_GpuImageProcTest
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// Canny
// Canny
struct
CV_GpuNppImageCannyTest
:
public
CV_GpuImageProcTest
//
struct CV_GpuNppImageCannyTest : public CV_GpuImageProcTest
{
//
{
CV_GpuNppImageCannyTest
()
:
CV_GpuImageProcTest
(
"GPU-NppImageCanny"
,
"Canny"
)
{}
//
CV_GpuNppImageCannyTest() : CV_GpuImageProcTest( "GPU-NppImageCanny", "Canny" ) {}
//
int
test
(
const
Mat
&
img
)
//
int test(const Mat& img)
{
//
{
if
(
img
.
type
()
!=
CV_8UC1
)
//
if (img.type() != CV_8UC1)
{
//
{
ts
->
printf
(
CvTS
::
LOG
,
"
\n
Unsupported type
\n
"
);
//
ts->printf(CvTS::LOG, "\nUnsupported type\n");
return
CvTS
::
OK
;
//
return CvTS::OK;
}
//
}
//
const
double
threshold1
=
1.0
,
threshold2
=
10.0
;
//
const double threshold1 = 1.0, threshold2 = 10.0;
//
Mat
cpudst
;
//
Mat cpudst;
cv
::
Canny
(
img
,
cpudst
,
threshold1
,
threshold2
);
//
cv::Canny(img, cpudst, threshold1, threshold2);
//
GpuMat
gpu1
(
img
);
//
GpuMat gpu1(img);
GpuMat
gpudst
;
//
GpuMat gpudst;
cv
::
gpu
::
Canny
(
gpu1
,
gpudst
,
threshold1
,
threshold2
);
//
cv::gpu::Canny(gpu1, gpudst, threshold1, threshold2);
//
return
CheckNorm
(
cpudst
,
gpudst
);
//
return CheckNorm(cpudst, gpudst);
}
//
}
};
//
};
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// cvtColor
// cvtColor
...
@@ -839,7 +839,7 @@ CV_GpuNppImageCopyMakeBorderTest CV_GpuNppImageCopyMakeBorder_test;
...
@@ -839,7 +839,7 @@ CV_GpuNppImageCopyMakeBorderTest CV_GpuNppImageCopyMakeBorder_test;
CV_GpuNppImageWarpAffineTest
CV_GpuNppImageWarpAffine_test
;
CV_GpuNppImageWarpAffineTest
CV_GpuNppImageWarpAffine_test
;
CV_GpuNppImageWarpPerspectiveTest
CV_GpuNppImageWarpPerspective_test
;
CV_GpuNppImageWarpPerspectiveTest
CV_GpuNppImageWarpPerspective_test
;
CV_GpuNppImageIntegralTest
CV_GpuNppImageIntegral_test
;
CV_GpuNppImageIntegralTest
CV_GpuNppImageIntegral_test
;
CV_GpuNppImageCannyTest
CV_GpuNppImageCanny_test
;
//
CV_GpuNppImageCannyTest CV_GpuNppImageCanny_test;
CV_GpuCvtColorTest
CV_GpuCvtColor_test
;
CV_GpuCvtColorTest
CV_GpuCvtColor_test
;
CV_GpuHistogramsTest
CV_GpuHistograms_test
;
CV_GpuHistogramsTest
CV_GpuHistograms_test
;
CV_GpuCornerHarrisTest
CV_GpuCornerHarris_test
;
CV_GpuCornerHarrisTest
CV_GpuCornerHarris_test
;
...
...
tests/gpu/src/operator_async_call.cpp
View file @
8274ed22
...
@@ -40,119 +40,54 @@
...
@@ -40,119 +40,54 @@
//M*/
//M*/
#include "gputest.hpp"
#include "gputest.hpp"
#include <string>
#include <iostream>
#include <fstream>
#include <iterator>
#include <limits>
#include <numeric>
#include <iomanip> // for cout << setw()
using
namespace
cv
;
using
namespace
std
;
using
namespace
std
;
using
namespace
gpu
;
using
namespace
cv
;
using
namespace
cv
::
gpu
;
class
CV_AsyncGpuMatTest
:
public
CvTest
{
public
:
CV_AsyncGpuMatTest
()
:
CvTest
(
"GPU-AsyncGpuMatOperator"
,
"async"
)
{
rows
=
234
;
cols
=
123
;
}
~
CV_AsyncGpuMatTest
()
{}
protected
:
void
run
(
int
);
template
<
typename
T
>
void
print_mat
(
const
T
&
mat
,
const
std
::
string
&
name
)
const
;
bool
compare_matrix
(
cv
::
Mat
&
cpumat
);
private
:
int
rows
;
int
cols
;
};
template
<
typename
T
>
void
CV_AsyncGpuMatTest
::
print_mat
(
const
T
&
mat
,
const
std
::
string
&
name
)
const
{
cv
::
imshow
(
name
,
mat
);
}
bool
CV_AsyncGpuMatTest
::
compare_matrix
(
cv
::
Mat
&
cpumat
)
struct
CV_AsyncGpuMatTest
:
public
CvTest
{
{
Mat
cmat
(
cpumat
.
size
(),
cpumat
.
type
(),
Scalar
::
all
(
0
));
CV_AsyncGpuMatTest
()
:
CvTest
(
"GPU-AsyncGpuMatOperator"
,
"async"
)
GpuMat
gmat0
(
cmat
);
GpuMat
gmat1
;
GpuMat
gmat2
;
GpuMat
gmat3
;
//int64 time = getTickCount();
Stream
stream
;
stream
.
enqueueMemSet
(
gmat0
,
cv
::
Scalar
::
all
(
1
),
gmat1
);
stream
.
enqueueMemSet
(
gmat0
,
cv
::
Scalar
::
all
(
1
),
gmat2
);
stream
.
enqueueMemSet
(
gmat0
,
cv
::
Scalar
::
all
(
1
),
gmat3
);
stream
.
waitForCompletion
();
//int64 time1 = getTickCount();
gmat1
.
copyTo
(
gmat0
);
gmat2
.
copyTo
(
gmat0
);
gmat3
.
copyTo
(
gmat0
);
//int64 time2 = getTickCount();
//std::cout << "\ntime async: " << std::fixed << std::setprecision(12) << double((time1 - time) / (double)getTickFrequency());
//std::cout << "\ntime sync: " << std::fixed << std::setprecision(12) << double((time2 - time1) / (double)getTickFrequency());
//std::cout << "\n";
#ifdef PRINT_MATRIX
print_mat
(
cmat
,
"cpu mat"
);
print_mat
(
gmat0
,
"gpu mat 0"
);
print_mat
(
gmat1
,
"gpu mat 1"
);
print_mat
(
gmat2
,
"gpu mat 2"
);
print_mat
(
gmat3
,
"gpu mat 3"
);
cv
::
waitKey
(
0
);
#endif
double
ret
=
norm
(
cmat
,
gmat0
)
+
norm
(
cmat
,
gmat1
)
+
norm
(
cmat
,
gmat2
)
+
norm
(
cmat
,
gmat3
);
if
(
ret
<
1.0
)
return
true
;
else
{
{
ts
->
printf
(
CvTS
::
LOG
,
"
\n
Norm: %f
\n
"
,
ret
);
return
false
;
}
}
}
void
CV_AsyncGpuMatTest
::
run
(
int
/* start_from */
)
void
run
(
int
)
{
{
bool
is_test_good
=
true
;
try
{
CudaMem
src
(
Mat
::
zeros
(
100
,
100
,
CV_8UC1
));
Mat
cpumat
(
rows
,
cols
,
CV_8U
)
;
GpuMat
gpusrc
;
cpumat
.
setTo
(
Scalar
::
all
(
127
)
);
GpuMat
gpudst0
,
gpudst1
(
100
,
100
,
CV_8UC1
);
try
CudaMem
cpudst0
;
{
CudaMem
cpudst1
;
is_test_good
&=
compare_matrix
(
cpumat
);
}
catch
(
cv
::
Exception
&
e
)
{
if
(
!
check_and_treat_gpu_exception
(
e
,
ts
))
throw
;
return
;
}
if
(
is_test_good
==
true
)
Stream
stream0
,
stream1
;
ts
->
set_failed_test_info
(
CvTS
::
OK
);
else
ts
->
set_failed_test_info
(
CvTS
::
FAIL_GENERIC
);
}
stream0
.
enqueueUpload
(
src
,
gpusrc
);
bitwise_not
(
gpusrc
,
gpudst0
,
GpuMat
(),
stream0
);
stream0
.
enqueueDownload
(
gpudst0
,
cpudst0
);
/////////////////////////////////////////////////////////////////////////////
stream1
.
enqueueMemSet
(
gpudst1
,
Scalar
::
all
(
128
));
/////////////////// tests registration /////////////////////////////////////
stream1
.
enqueueDownload
(
gpudst1
,
cpudst1
);
/////////////////////////////////////////////////////////////////////////////
stream0
.
waitForCompletion
();
stream1
.
waitForCompletion
();
Mat
cpu_gold0
(
100
,
100
,
CV_8UC1
,
Scalar
::
all
(
255
));
Mat
cpu_gold1
(
100
,
100
,
CV_8UC1
,
Scalar
::
all
(
128
));
CV_AsyncGpuMatTest
CV_AsyncGpuMatTest_test
;
if
(
norm
(
cpudst0
,
cpu_gold0
,
NORM_INF
)
>
0
||
norm
(
cpudst1
,
cpu_gold1
,
NORM_INF
)
>
0
)
ts
->
set_failed_test_info
(
CvTS
::
FAIL_GENERIC
);
else
ts
->
set_failed_test_info
(
CvTS
::
OK
);
}
catch
(
cv
::
Exception
&
e
)
{
if
(
!
check_and_treat_gpu_exception
(
e
,
ts
))
throw
;
return
;
}
}
}
CV_AsyncGpuMatTest_test
;
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