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
2ecca8f5
Commit
2ecca8f5
authored
Jan 13, 2015
by
Vadim Pisarevsky
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #3566 from jet47:cuda-imgproc-refactoring
parents
60cedd7a
f50a0612
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
100 additions
and
71 deletions
+100
-71
private.cuda.hpp
modules/core/include/opencv2/core/private.cuda.hpp
+6
-0
cudaimgproc.hpp
modules/cudaimgproc/include/opencv2/cudaimgproc.hpp
+0
-0
perf_histogram.cpp
modules/cudaimgproc/perf/perf_histogram.cpp
+3
-6
canny.cpp
modules/cudaimgproc/src/canny.cpp
+25
-25
canny.cu
modules/cudaimgproc/src/cuda/canny.cu
+28
-22
gftt.cpp
modules/cudaimgproc/src/gftt.cpp
+5
-2
histogram.cpp
modules/cudaimgproc/src/histogram.cpp
+0
-0
hough_circles.cpp
modules/cudaimgproc/src/hough_circles.cpp
+5
-2
hough_lines.cpp
modules/cudaimgproc/src/hough_lines.cpp
+15
-6
hough_segments.cpp
modules/cudaimgproc/src/hough_segments.cpp
+5
-2
mssegmentation.cpp
modules/cudaimgproc/src/mssegmentation.cpp
+6
-3
tests.cpp
samples/gpu/performance/tests.cpp
+2
-3
No files found.
modules/core/include/opencv2/core/private.cuda.hpp
View file @
2ecca8f5
...
...
@@ -130,6 +130,12 @@ namespace cv { namespace cuda
class
NppStreamHandler
{
public
:
inline
explicit
NppStreamHandler
(
Stream
&
newStream
)
{
oldStream
=
nppGetStream
();
nppSetStream
(
StreamAccessor
::
getStream
(
newStream
));
}
inline
explicit
NppStreamHandler
(
cudaStream_t
newStream
)
{
oldStream
=
nppGetStream
();
...
...
modules/cudaimgproc/include/opencv2/cudaimgproc.hpp
View file @
2ecca8f5
This diff is collapsed.
Click to expand it.
modules/cudaimgproc/perf/perf_histogram.cpp
View file @
2ecca8f5
...
...
@@ -63,9 +63,8 @@ PERF_TEST_P(Sz_Depth, HistEvenC1,
{
const
cv
::
cuda
::
GpuMat
d_src
(
src
);
cv
::
cuda
::
GpuMat
dst
;
cv
::
cuda
::
GpuMat
d_buf
;
TEST_CYCLE
()
cv
::
cuda
::
histEven
(
d_src
,
dst
,
d_buf
,
30
,
0
,
180
);
TEST_CYCLE
()
cv
::
cuda
::
histEven
(
d_src
,
dst
,
30
,
0
,
180
);
CUDA_SANITY_CHECK
(
dst
);
}
...
...
@@ -106,9 +105,8 @@ PERF_TEST_P(Sz_Depth, HistEvenC4,
{
const
cv
::
cuda
::
GpuMat
d_src
(
src
);
cv
::
cuda
::
GpuMat
d_hist
[
4
];
cv
::
cuda
::
GpuMat
d_buf
;
TEST_CYCLE
()
cv
::
cuda
::
histEven
(
d_src
,
d_hist
,
d_buf
,
histSize
,
lowerLevel
,
upperLevel
);
TEST_CYCLE
()
cv
::
cuda
::
histEven
(
d_src
,
d_hist
,
histSize
,
lowerLevel
,
upperLevel
);
cv
::
Mat
cpu_hist0
,
cpu_hist1
,
cpu_hist2
,
cpu_hist3
;
d_hist
[
0
].
download
(
cpu_hist0
);
...
...
@@ -167,9 +165,8 @@ PERF_TEST_P(Sz, EqualizeHist,
{
const
cv
::
cuda
::
GpuMat
d_src
(
src
);
cv
::
cuda
::
GpuMat
dst
;
cv
::
cuda
::
GpuMat
d_buf
;
TEST_CYCLE
()
cv
::
cuda
::
equalizeHist
(
d_src
,
dst
,
d_buf
);
TEST_CYCLE
()
cv
::
cuda
::
equalizeHist
(
d_src
,
dst
);
CUDA_SANITY_CHECK
(
dst
);
}
...
...
modules/cudaimgproc/src/canny.cpp
View file @
2ecca8f5
...
...
@@ -53,16 +53,16 @@ Ptr<CannyEdgeDetector> cv::cuda::createCannyEdgeDetector(double, double, int, bo
namespace
canny
{
void
calcMagnitude
(
PtrStepSzb
srcWhole
,
int
xoff
,
int
yoff
,
PtrStepSzi
dx
,
PtrStepSzi
dy
,
PtrStepSzf
mag
,
bool
L2Grad
);
void
calcMagnitude
(
PtrStepSzi
dx
,
PtrStepSzi
dy
,
PtrStepSzf
mag
,
bool
L2Grad
);
void
calcMagnitude
(
PtrStepSzb
srcWhole
,
int
xoff
,
int
yoff
,
PtrStepSzi
dx
,
PtrStepSzi
dy
,
PtrStepSzf
mag
,
bool
L2Grad
,
cudaStream_t
stream
);
void
calcMagnitude
(
PtrStepSzi
dx
,
PtrStepSzi
dy
,
PtrStepSzf
mag
,
bool
L2Grad
,
cudaStream_t
stream
);
void
calcMap
(
PtrStepSzi
dx
,
PtrStepSzi
dy
,
PtrStepSzf
mag
,
PtrStepSzi
map
,
float
low_thresh
,
float
high_thresh
);
void
calcMap
(
PtrStepSzi
dx
,
PtrStepSzi
dy
,
PtrStepSzf
mag
,
PtrStepSzi
map
,
float
low_thresh
,
float
high_thresh
,
cudaStream_t
stream
);
void
edgesHysteresisLocal
(
PtrStepSzi
map
,
short2
*
st1
);
void
edgesHysteresisLocal
(
PtrStepSzi
map
,
short2
*
st1
,
cudaStream_t
stream
);
void
edgesHysteresisGlobal
(
PtrStepSzi
map
,
short2
*
st1
,
short2
*
st2
);
void
edgesHysteresisGlobal
(
PtrStepSzi
map
,
short2
*
st1
,
short2
*
st2
,
cudaStream_t
stream
);
void
getEdges
(
PtrStepSzi
map
,
PtrStepSzb
dst
);
void
getEdges
(
PtrStepSzi
map
,
PtrStepSzb
dst
,
cudaStream_t
stream
);
}
namespace
...
...
@@ -76,8 +76,8 @@ namespace
old_apperture_size_
=
-
1
;
}
void
detect
(
InputArray
image
,
OutputArray
edges
);
void
detect
(
InputArray
dx
,
InputArray
dy
,
OutputArray
edges
);
void
detect
(
InputArray
image
,
OutputArray
edges
,
Stream
&
stream
);
void
detect
(
InputArray
dx
,
InputArray
dy
,
OutputArray
edges
,
Stream
&
stream
);
void
setLowThreshold
(
double
low_thresh
)
{
low_thresh_
=
low_thresh
;
}
double
getLowThreshold
()
const
{
return
low_thresh_
;
}
...
...
@@ -111,7 +111,7 @@ namespace
private
:
void
createBuf
(
Size
image_size
);
void
CannyCaller
(
GpuMat
&
edges
);
void
CannyCaller
(
GpuMat
&
edges
,
Stream
&
stream
);
double
low_thresh_
;
double
high_thresh_
;
...
...
@@ -128,7 +128,7 @@ namespace
int
old_apperture_size_
;
};
void
CannyImpl
::
detect
(
InputArray
_image
,
OutputArray
_edges
)
void
CannyImpl
::
detect
(
InputArray
_image
,
OutputArray
_edges
,
Stream
&
stream
)
{
GpuMat
image
=
_image
.
getGpuMat
();
...
...
@@ -150,24 +150,24 @@ namespace
image
.
locateROI
(
wholeSize
,
ofs
);
GpuMat
srcWhole
(
wholeSize
,
image
.
type
(),
image
.
datastart
,
image
.
step
);
canny
::
calcMagnitude
(
srcWhole
,
ofs
.
x
,
ofs
.
y
,
dx_
,
dy_
,
mag_
,
L2gradient_
);
canny
::
calcMagnitude
(
srcWhole
,
ofs
.
x
,
ofs
.
y
,
dx_
,
dy_
,
mag_
,
L2gradient_
,
StreamAccessor
::
getStream
(
stream
)
);
}
else
{
#ifndef HAVE_OPENCV_CUDAFILTERS
throw_no_cuda
();
#else
filterDX_
->
apply
(
image
,
dx_
);
filterDY_
->
apply
(
image
,
dy_
);
filterDX_
->
apply
(
image
,
dx_
,
stream
);
filterDY_
->
apply
(
image
,
dy_
,
stream
);
canny
::
calcMagnitude
(
dx_
,
dy_
,
mag_
,
L2gradient_
);
canny
::
calcMagnitude
(
dx_
,
dy_
,
mag_
,
L2gradient_
,
StreamAccessor
::
getStream
(
stream
)
);
#endif
}
CannyCaller
(
edges
);
CannyCaller
(
edges
,
stream
);
}
void
CannyImpl
::
detect
(
InputArray
_dx
,
InputArray
_dy
,
OutputArray
_edges
)
void
CannyImpl
::
detect
(
InputArray
_dx
,
InputArray
_dy
,
OutputArray
_edges
,
Stream
&
stream
)
{
GpuMat
dx
=
_dx
.
getGpuMat
();
GpuMat
dy
=
_dy
.
getGpuMat
();
...
...
@@ -176,8 +176,8 @@ namespace
CV_Assert
(
dy
.
type
()
==
dx
.
type
()
&&
dy
.
size
()
==
dx
.
size
()
);
CV_Assert
(
deviceSupports
(
SHARED_ATOMICS
)
);
dx
.
copyTo
(
dx_
);
dy
.
copyTo
(
dy_
);
dx
.
copyTo
(
dx_
,
stream
);
dy
.
copyTo
(
dy_
,
stream
);
if
(
low_thresh_
>
high_thresh_
)
std
::
swap
(
low_thresh_
,
high_thresh_
);
...
...
@@ -187,9 +187,9 @@ namespace
_edges
.
create
(
dx
.
size
(),
CV_8UC1
);
GpuMat
edges
=
_edges
.
getGpuMat
();
canny
::
calcMagnitude
(
dx_
,
dy_
,
mag_
,
L2gradient_
);
canny
::
calcMagnitude
(
dx_
,
dy_
,
mag_
,
L2gradient_
,
StreamAccessor
::
getStream
(
stream
)
);
CannyCaller
(
edges
);
CannyCaller
(
edges
,
stream
);
}
void
CannyImpl
::
createBuf
(
Size
image_size
)
...
...
@@ -215,16 +215,16 @@ namespace
ensureSizeIsEnough
(
1
,
image_size
.
area
(),
CV_16SC2
,
st2_
);
}
void
CannyImpl
::
CannyCaller
(
GpuMat
&
edges
)
void
CannyImpl
::
CannyCaller
(
GpuMat
&
edges
,
Stream
&
stream
)
{
map_
.
setTo
(
Scalar
::
all
(
0
));
canny
::
calcMap
(
dx_
,
dy_
,
mag_
,
map_
,
static_cast
<
float
>
(
low_thresh_
),
static_cast
<
float
>
(
high_thresh_
));
canny
::
calcMap
(
dx_
,
dy_
,
mag_
,
map_
,
static_cast
<
float
>
(
low_thresh_
),
static_cast
<
float
>
(
high_thresh_
)
,
StreamAccessor
::
getStream
(
stream
)
);
canny
::
edgesHysteresisLocal
(
map_
,
st1_
.
ptr
<
short2
>
());
canny
::
edgesHysteresisLocal
(
map_
,
st1_
.
ptr
<
short2
>
()
,
StreamAccessor
::
getStream
(
stream
)
);
canny
::
edgesHysteresisGlobal
(
map_
,
st1_
.
ptr
<
short2
>
(),
st2_
.
ptr
<
short2
>
());
canny
::
edgesHysteresisGlobal
(
map_
,
st1_
.
ptr
<
short2
>
(),
st2_
.
ptr
<
short2
>
()
,
StreamAccessor
::
getStream
(
stream
)
);
canny
::
getEdges
(
map_
,
edges
);
canny
::
getEdges
(
map_
,
edges
,
StreamAccessor
::
getStream
(
stream
)
);
}
}
...
...
modules/cudaimgproc/src/cuda/canny.cu
View file @
2ecca8f5
...
...
@@ -120,7 +120,7 @@ namespace canny
mag(y, x) = norm(dxVal, dyVal);
}
void calcMagnitude(PtrStepSzb srcWhole, int xoff, int yoff, PtrStepSzi dx, PtrStepSzi dy, PtrStepSzf mag, bool L2Grad)
void calcMagnitude(PtrStepSzb srcWhole, int xoff, int yoff, PtrStepSzi dx, PtrStepSzi dy, PtrStepSzf mag, bool L2Grad
, cudaStream_t stream
)
{
const dim3 block(16, 16);
const dim3 grid(divUp(mag.cols, block.x), divUp(mag.rows, block.y));
...
...
@@ -131,30 +131,31 @@ namespace canny
if (L2Grad)
{
L2 norm;
calcMagnitudeKernel<<<grid, block>>>(src, dx, dy, mag, norm);
calcMagnitudeKernel<<<grid, block
, 0, stream
>>>(src, dx, dy, mag, norm);
}
else
{
L1 norm;
calcMagnitudeKernel<<<grid, block>>>(src, dx, dy, mag, norm);
calcMagnitudeKernel<<<grid, block
, 0, stream
>>>(src, dx, dy, mag, norm);
}
cudaSafeCall( cudaGetLastError() );
cudaSafeCall(cudaThreadSynchronize());
if (stream == NULL)
cudaSafeCall( cudaDeviceSynchronize() );
}
void calcMagnitude(PtrStepSzi dx, PtrStepSzi dy, PtrStepSzf mag, bool L2Grad)
void calcMagnitude(PtrStepSzi dx, PtrStepSzi dy, PtrStepSzf mag, bool L2Grad
, cudaStream_t stream
)
{
if (L2Grad)
{
L2 norm;
transform(dx, dy, mag, norm, WithOutMask(),
0
);
transform(dx, dy, mag, norm, WithOutMask(),
stream
);
}
else
{
L1 norm;
transform(dx, dy, mag, norm, WithOutMask(),
0
);
transform(dx, dy, mag, norm, WithOutMask(),
stream
);
}
}
}
...
...
@@ -217,17 +218,18 @@ namespace canny
map(y, x) = edge_type;
}
void calcMap(PtrStepSzi dx, PtrStepSzi dy, PtrStepSzf mag, PtrStepSzi map, float low_thresh, float high_thresh)
void calcMap(PtrStepSzi dx, PtrStepSzi dy, PtrStepSzf mag, PtrStepSzi map, float low_thresh, float high_thresh
, cudaStream_t stream
)
{
const dim3 block(16, 16);
const dim3 grid(divUp(dx.cols, block.x), divUp(dx.rows, block.y));
bindTexture(&tex_mag, mag);
calcMapKernel<<<grid, block>>>(dx, dy, map, low_thresh, high_thresh);
calcMapKernel<<<grid, block
, 0, stream
>>>(dx, dy, map, low_thresh, high_thresh);
cudaSafeCall( cudaGetLastError() );
cudaSafeCall( cudaDeviceSynchronize() );
if (stream == NULL)
cudaSafeCall( cudaDeviceSynchronize() );
}
}
...
...
@@ -328,20 +330,21 @@ namespace canny
}
}
void edgesHysteresisLocal(PtrStepSzi map, short2* st1)
void edgesHysteresisLocal(PtrStepSzi map, short2* st1
, cudaStream_t stream
)
{
void* counter_ptr;
cudaSafeCall( cudaGetSymbolAddress(&counter_ptr, counter) );
cudaSafeCall( cudaMemset
(counter_ptr, 0, sizeof(int)
) );
cudaSafeCall( cudaMemset
Async(counter_ptr, 0, sizeof(int), stream
) );
const dim3 block(16, 16);
const dim3 grid(divUp(map.cols, block.x), divUp(map.rows, block.y));
edgesHysteresisLocalKernel<<<grid, block>>>(map, st1);
edgesHysteresisLocalKernel<<<grid, block
, 0, stream
>>>(map, st1);
cudaSafeCall( cudaGetLastError() );
cudaSafeCall( cudaDeviceSynchronize() );
if (stream == NULL)
cudaSafeCall( cudaDeviceSynchronize() );
}
}
...
...
@@ -441,27 +444,30 @@ namespace canny
}
}
void edgesHysteresisGlobal(PtrStepSzi map, short2* st1, short2* st2)
void edgesHysteresisGlobal(PtrStepSzi map, short2* st1, short2* st2
, cudaStream_t stream
)
{
void* counter_ptr;
cudaSafeCall( cudaGetSymbolAddress(&counter_ptr, canny::counter) );
int count;
cudaSafeCall( cudaMemcpy(&count, counter_ptr, sizeof(int), cudaMemcpyDeviceToHost) );
cudaSafeCall( cudaMemcpyAsync(&count, counter_ptr, sizeof(int), cudaMemcpyDeviceToHost, stream) );
cudaSafeCall( cudaStreamSynchronize(stream) );
while (count > 0)
{
cudaSafeCall( cudaMemset
(counter_ptr, 0, sizeof(int)
) );
cudaSafeCall( cudaMemset
Async(counter_ptr, 0, sizeof(int), stream
) );
const dim3 block(128);
const dim3 grid(::min(count, 65535u), divUp(count, 65535), 1);
edgesHysteresisGlobalKernel<<<grid, block>>>(map, st1, st2, count);
edgesHysteresisGlobalKernel<<<grid, block
, 0, stream
>>>(map, st1, st2, count);
cudaSafeCall( cudaGetLastError() );
cudaSafeCall( cudaDeviceSynchronize() );
if (stream == NULL)
cudaSafeCall( cudaDeviceSynchronize() );
cudaSafeCall( cudaMemcpy(&count, counter_ptr, sizeof(int), cudaMemcpyDeviceToHost) );
cudaSafeCall( cudaMemcpyAsync(&count, counter_ptr, sizeof(int), cudaMemcpyDeviceToHost, stream) );
cudaSafeCall( cudaStreamSynchronize(stream) );
count = min(count, map.cols * map.rows);
...
...
@@ -499,9 +505,9 @@ namespace cv { namespace cuda { namespace device
namespace canny
{
void getEdges(PtrStepSzi map, PtrStepSzb dst)
void getEdges(PtrStepSzi map, PtrStepSzb dst
, cudaStream_t stream
)
{
transform(map, dst, GetEdges(), WithOutMask(),
0
);
transform(map, dst, GetEdges(), WithOutMask(),
stream
);
}
}
...
...
modules/cudaimgproc/src/gftt.cpp
View file @
2ecca8f5
...
...
@@ -68,7 +68,7 @@ namespace
GoodFeaturesToTrackDetector
(
int
srcType
,
int
maxCorners
,
double
qualityLevel
,
double
minDistance
,
int
blockSize
,
bool
useHarrisDetector
,
double
harrisK
);
void
detect
(
InputArray
image
,
OutputArray
corners
,
InputArray
mask
=
noArray
()
);
void
detect
(
InputArray
image
,
OutputArray
corners
,
InputArray
mask
,
Stream
&
stream
);
private
:
int
maxCorners_
;
...
...
@@ -96,8 +96,11 @@ namespace
cuda
::
createMinEigenValCorner
(
srcType
,
blockSize
,
3
);
}
void
GoodFeaturesToTrackDetector
::
detect
(
InputArray
_image
,
OutputArray
_corners
,
InputArray
_mask
)
void
GoodFeaturesToTrackDetector
::
detect
(
InputArray
_image
,
OutputArray
_corners
,
InputArray
_mask
,
Stream
&
stream
)
{
// TODO : implement async version
(
void
)
stream
;
using
namespace
cv
::
cuda
::
device
::
gfft
;
GpuMat
image
=
_image
.
getGpuMat
();
...
...
modules/cudaimgproc/src/histogram.cpp
View file @
2ecca8f5
This diff is collapsed.
Click to expand it.
modules/cudaimgproc/src/hough_circles.cpp
View file @
2ecca8f5
...
...
@@ -74,7 +74,7 @@ namespace
public
:
HoughCirclesDetectorImpl
(
float
dp
,
float
minDist
,
int
cannyThreshold
,
int
votesThreshold
,
int
minRadius
,
int
maxRadius
,
int
maxCircles
);
void
detect
(
InputArray
src
,
OutputArray
circles
);
void
detect
(
InputArray
src
,
OutputArray
circles
,
Stream
&
stream
);
void
setDp
(
float
dp
)
{
dp_
=
dp
;
}
float
getDp
()
const
{
return
dp_
;
}
...
...
@@ -154,8 +154,11 @@ namespace
filterDy_
=
cuda
::
createSobelFilter
(
CV_8UC1
,
CV_32S
,
0
,
1
);
}
void
HoughCirclesDetectorImpl
::
detect
(
InputArray
_src
,
OutputArray
circles
)
void
HoughCirclesDetectorImpl
::
detect
(
InputArray
_src
,
OutputArray
circles
,
Stream
&
stream
)
{
// TODO : implement async version
(
void
)
stream
;
using
namespace
cv
::
cuda
::
device
::
hough
;
using
namespace
cv
::
cuda
::
device
::
hough_circles
;
...
...
modules/cudaimgproc/src/hough_lines.cpp
View file @
2ecca8f5
...
...
@@ -75,8 +75,8 @@ namespace
{
}
void
detect
(
InputArray
src
,
OutputArray
lines
);
void
downloadResults
(
InputArray
d_lines
,
OutputArray
h_lines
,
OutputArray
h_votes
=
noArray
()
);
void
detect
(
InputArray
src
,
OutputArray
lines
,
Stream
&
stream
);
void
downloadResults
(
InputArray
d_lines
,
OutputArray
h_lines
,
OutputArray
h_votes
,
Stream
&
stream
);
void
setRho
(
float
rho
)
{
rho_
=
rho
;
}
float
getRho
()
const
{
return
rho_
;
}
...
...
@@ -125,8 +125,11 @@ namespace
GpuMat
result_
;
};
void
HoughLinesDetectorImpl
::
detect
(
InputArray
_src
,
OutputArray
lines
)
void
HoughLinesDetectorImpl
::
detect
(
InputArray
_src
,
OutputArray
lines
,
Stream
&
stream
)
{
// TODO : implement async version
(
void
)
stream
;
using
namespace
cv
::
cuda
::
device
::
hough
;
using
namespace
cv
::
cuda
::
device
::
hough_lines
;
...
...
@@ -170,7 +173,7 @@ namespace
result_
.
copyTo
(
lines
);
}
void
HoughLinesDetectorImpl
::
downloadResults
(
InputArray
_d_lines
,
OutputArray
h_lines
,
OutputArray
h_votes
)
void
HoughLinesDetectorImpl
::
downloadResults
(
InputArray
_d_lines
,
OutputArray
h_lines
,
OutputArray
h_votes
,
Stream
&
stream
)
{
GpuMat
d_lines
=
_d_lines
.
getGpuMat
();
...
...
@@ -184,12 +187,18 @@ namespace
CV_Assert
(
d_lines
.
rows
==
2
&&
d_lines
.
type
()
==
CV_32FC2
);
d_lines
.
row
(
0
).
download
(
h_lines
);
if
(
stream
)
d_lines
.
row
(
0
).
download
(
h_lines
,
stream
);
else
d_lines
.
row
(
0
).
download
(
h_lines
);
if
(
h_votes
.
needed
())
{
GpuMat
d_votes
(
1
,
d_lines
.
cols
,
CV_32SC1
,
d_lines
.
ptr
<
int
>
(
1
));
d_votes
.
download
(
h_votes
);
if
(
stream
)
d_votes
.
download
(
h_votes
,
stream
);
else
d_votes
.
download
(
h_votes
);
}
}
}
...
...
modules/cudaimgproc/src/hough_segments.cpp
View file @
2ecca8f5
...
...
@@ -79,7 +79,7 @@ namespace
{
}
void
detect
(
InputArray
src
,
OutputArray
lines
);
void
detect
(
InputArray
src
,
OutputArray
lines
,
Stream
&
stream
);
void
setRho
(
float
rho
)
{
rho_
=
rho
;
}
float
getRho
()
const
{
return
rho_
;
}
...
...
@@ -128,8 +128,11 @@ namespace
GpuMat
result_
;
};
void
HoughSegmentDetectorImpl
::
detect
(
InputArray
_src
,
OutputArray
lines
)
void
HoughSegmentDetectorImpl
::
detect
(
InputArray
_src
,
OutputArray
lines
,
Stream
&
stream
)
{
// TODO : implement async version
(
void
)
stream
;
using
namespace
cv
::
cuda
::
device
::
hough
;
using
namespace
cv
::
cuda
::
device
::
hough_lines
;
using
namespace
cv
::
cuda
::
device
::
hough_segments
;
...
...
modules/cudaimgproc/src/mssegmentation.cpp
View file @
2ecca8f5
...
...
@@ -43,7 +43,7 @@
#if !defined HAVE_CUDA || defined(CUDA_DISABLER)
void
cv
::
cuda
::
meanShiftSegmentation
(
InputArray
,
OutputArray
,
int
,
int
,
int
,
TermCriteria
)
{
throw_no_cuda
();
}
void
cv
::
cuda
::
meanShiftSegmentation
(
InputArray
,
OutputArray
,
int
,
int
,
int
,
TermCriteria
,
Stream
&
)
{
throw_no_cuda
();
}
#else
...
...
@@ -222,7 +222,7 @@ inline int dist2(const cv::Vec2s& lhs, const cv::Vec2s& rhs)
}
// anonymous namespace
void
cv
::
cuda
::
meanShiftSegmentation
(
InputArray
_src
,
OutputArray
_dst
,
int
sp
,
int
sr
,
int
minsize
,
TermCriteria
criteria
)
void
cv
::
cuda
::
meanShiftSegmentation
(
InputArray
_src
,
OutputArray
_dst
,
int
sp
,
int
sr
,
int
minsize
,
TermCriteria
criteria
,
Stream
&
stream
)
{
GpuMat
src
=
_src
.
getGpuMat
();
...
...
@@ -235,7 +235,10 @@ void cv::cuda::meanShiftSegmentation(InputArray _src, OutputArray _dst, int sp,
// Perform mean shift procedure and obtain region and spatial maps
GpuMat
d_rmap
,
d_spmap
;
cuda
::
meanShiftProc
(
src
,
d_rmap
,
d_spmap
,
sp
,
sr
,
criteria
);
cuda
::
meanShiftProc
(
src
,
d_rmap
,
d_spmap
,
sp
,
sr
,
criteria
,
stream
);
stream
.
waitForCompletion
();
Mat
rmap
(
d_rmap
);
Mat
spmap
(
d_spmap
);
...
...
samples/gpu/performance/tests.cpp
View file @
2ecca8f5
...
...
@@ -1053,12 +1053,11 @@ TEST(equalizeHist)
cuda
::
GpuMat
d_src
(
src
);
cuda
::
GpuMat
d_dst
;
cuda
::
GpuMat
d_buf
;
cuda
::
equalizeHist
(
d_src
,
d_dst
,
d_buf
);
cuda
::
equalizeHist
(
d_src
,
d_dst
);
CUDA_ON
;
cuda
::
equalizeHist
(
d_src
,
d_dst
,
d_buf
);
cuda
::
equalizeHist
(
d_src
,
d_dst
);
CUDA_OFF
;
}
}
...
...
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