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
bb443160
Commit
bb443160
authored
May 06, 2015
by
Alexander Smorkalov
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #3990 from jet47:cuda-bitwise-mask
parents
0b2cfcfd
d87c30dc
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
61 additions
and
38 deletions
+61
-38
element_operations.cu
modules/gpu/src/cuda/element_operations.cu
+20
-20
element_operations.cpp
modules/gpu/src/element_operations.cpp
+0
-0
test_core.cpp
modules/gpu/test/test_core.cpp
+41
-18
No files found.
modules/gpu/src/cuda/element_operations.cu
View file @
bb443160
...
...
@@ -1896,53 +1896,53 @@ namespace cv { namespace gpu { namespace device
namespace arithm
{
template <typename T> void bitMatNot(PtrStepSzb src, PtrStepSzb dst, PtrStepb mask, cudaStream_t stream)
template <typename T> void bitMatNot(PtrStepSzb src, PtrStepSzb dst, PtrStepb mask,
int num_channels,
cudaStream_t stream)
{
if (mask.data)
transform((PtrStepSz<T>) src, (PtrStepSz<T>) dst, bit_not<T>(),
mask
, stream);
transform((PtrStepSz<T>) src, (PtrStepSz<T>) dst, bit_not<T>(),
SingleMaskChannels(mask, num_channels)
, stream);
else
transform((PtrStepSz<T>) src, (PtrStepSz<T>) dst, bit_not<T>(), WithOutMask(), stream);
}
template <typename T> void bitMatAnd(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask, cudaStream_t stream)
template <typename T> void bitMatAnd(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask,
int num_channels,
cudaStream_t stream)
{
if (mask.data)
transform((PtrStepSz<T>) src1, (PtrStepSz<T>) src2, (PtrStepSz<T>) dst, bit_and<T>(),
mask
, stream);
transform((PtrStepSz<T>) src1, (PtrStepSz<T>) src2, (PtrStepSz<T>) dst, bit_and<T>(),
SingleMaskChannels(mask, num_channels)
, stream);
else
transform((PtrStepSz<T>) src1, (PtrStepSz<T>) src2, (PtrStepSz<T>) dst, bit_and<T>(), WithOutMask(), stream);
}
template <typename T> void bitMatOr(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask, cudaStream_t stream)
template <typename T> void bitMatOr(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask,
int num_channels,
cudaStream_t stream)
{
if (mask.data)
transform((PtrStepSz<T>) src1, (PtrStepSz<T>) src2, (PtrStepSz<T>) dst, bit_or<T>(),
mask
, stream);
transform((PtrStepSz<T>) src1, (PtrStepSz<T>) src2, (PtrStepSz<T>) dst, bit_or<T>(),
SingleMaskChannels(mask, num_channels)
, stream);
else
transform((PtrStepSz<T>) src1, (PtrStepSz<T>) src2, (PtrStepSz<T>) dst, bit_or<T>(), WithOutMask(), stream);
}
template <typename T> void bitMatXor(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask, cudaStream_t stream)
template <typename T> void bitMatXor(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask,
int num_channels,
cudaStream_t stream)
{
if (mask.data)
transform((PtrStepSz<T>) src1, (PtrStepSz<T>) src2, (PtrStepSz<T>) dst, bit_xor<T>(),
mask
, stream);
transform((PtrStepSz<T>) src1, (PtrStepSz<T>) src2, (PtrStepSz<T>) dst, bit_xor<T>(),
SingleMaskChannels(mask, num_channels)
, stream);
else
transform((PtrStepSz<T>) src1, (PtrStepSz<T>) src2, (PtrStepSz<T>) dst, bit_xor<T>(), WithOutMask(), stream);
}
template void bitMatNot<uchar>(PtrStepSzb src, PtrStepSzb dst, PtrStepb mask, cudaStream_t stream);
template void bitMatNot<ushort>(PtrStepSzb src, PtrStepSzb dst, PtrStepb mask, cudaStream_t stream);
template void bitMatNot<uint>(PtrStepSzb src, PtrStepSzb dst, PtrStepb mask, cudaStream_t stream);
template void bitMatNot<uchar>(PtrStepSzb src, PtrStepSzb dst, PtrStepb mask,
int num_channels,
cudaStream_t stream);
template void bitMatNot<ushort>(PtrStepSzb src, PtrStepSzb dst, PtrStepb mask,
int num_channels,
cudaStream_t stream);
template void bitMatNot<uint>(PtrStepSzb src, PtrStepSzb dst, PtrStepb mask,
int num_channels,
cudaStream_t stream);
template void bitMatAnd<uchar>(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask, cudaStream_t stream);
template void bitMatAnd<ushort>(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask, cudaStream_t stream);
template void bitMatAnd<uint>(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask, cudaStream_t stream);
template void bitMatAnd<uchar>(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask,
int num_channels,
cudaStream_t stream);
template void bitMatAnd<ushort>(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask,
int num_channels,
cudaStream_t stream);
template void bitMatAnd<uint>(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask,
int num_channels,
cudaStream_t stream);
template void bitMatOr<uchar>(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask, cudaStream_t stream);
template void bitMatOr<ushort>(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask, cudaStream_t stream);
template void bitMatOr<uint>(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask, cudaStream_t stream);
template void bitMatOr<uchar>(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask,
int num_channels,
cudaStream_t stream);
template void bitMatOr<ushort>(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask,
int num_channels,
cudaStream_t stream);
template void bitMatOr<uint>(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask,
int num_channels,
cudaStream_t stream);
template void bitMatXor<uchar>(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask, cudaStream_t stream);
template void bitMatXor<ushort>(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask, cudaStream_t stream);
template void bitMatXor<uint>(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask, cudaStream_t stream);
template void bitMatXor<uchar>(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask,
int num_channels,
cudaStream_t stream);
template void bitMatXor<ushort>(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask,
int num_channels,
cudaStream_t stream);
template void bitMatXor<uint>(PtrStepSzb src1, PtrStepSzb src2, PtrStepSzb dst, PtrStepb mask,
int num_channels,
cudaStream_t stream);
}
//////////////////////////////////////////////////////////////////////////////////////
...
...
modules/gpu/src/element_operations.cpp
View file @
bb443160
This diff is collapsed.
Click to expand it.
modules/gpu/test/test_core.cpp
View file @
bb443160
...
...
@@ -1785,72 +1785,95 @@ INSTANTIATE_TEST_CASE_P(GPU_Core, Compare_Scalar, testing::Combine(
//////////////////////////////////////////////////////////////////////////////
// Bitwise_Array
PARAM_TEST_CASE
(
Bitwise_Array
,
cv
::
gpu
::
DeviceInfo
,
cv
::
Size
,
MatType
)
PARAM_TEST_CASE
(
Bitwise_Array
,
cv
::
gpu
::
DeviceInfo
,
cv
::
Size
,
MatType
,
UseRoi
)
{
cv
::
gpu
::
DeviceInfo
devInfo
;
cv
::
Size
size
;
int
type
;
bool
useRoi
;
cv
::
Mat
src1
;
cv
::
Mat
src2
;
cv
::
Mat
mask
;
virtual
void
SetUp
()
{
devInfo
=
GET_PARAM
(
0
);
size
=
GET_PARAM
(
1
);
type
=
GET_PARAM
(
2
);
useRoi
=
GET_PARAM
(
3
);
cv
::
gpu
::
setDevice
(
devInfo
.
deviceID
());
src1
=
randomMat
(
size
,
type
,
0.0
,
std
::
numeric_limits
<
int
>::
max
());
src2
=
randomMat
(
size
,
type
,
0.0
,
std
::
numeric_limits
<
int
>::
max
());
mask
=
randomMat
(
size
,
CV_8UC1
,
0.0
,
2.0
);
}
};
GPU_TEST_P
(
Bitwise_Array
,
Not
)
{
cv
::
gpu
::
GpuMat
dst
;
cv
::
gpu
::
bitwise_not
(
loadMat
(
src1
),
dst
);
cv
::
gpu
::
GpuMat
dst_nomask
,
dst_mask
(
src1
.
size
(),
src1
.
type
(),
cv
::
Scalar
::
all
(
0
));
cv
::
gpu
::
bitwise_not
(
loadMat
(
src1
,
useRoi
),
dst_nomask
);
cv
::
gpu
::
bitwise_not
(
loadMat
(
src1
,
useRoi
),
dst_mask
,
loadMat
(
mask
,
useRoi
));
cv
::
Mat
dst_gold
=
~
src1
;
cv
::
Mat
dst_gold_nomask
,
dst_gold_mask
(
src1
.
size
(),
src1
.
type
(),
cv
::
Scalar
::
all
(
0
));
cv
::
bitwise_not
(
src1
,
dst_gold_nomask
);
cv
::
bitwise_not
(
src1
,
dst_gold_mask
,
mask
);
EXPECT_MAT_NEAR
(
dst_gold
,
dst
,
0.0
);
EXPECT_MAT_NEAR
(
dst_gold_nomask
,
dst_nomask
,
0.0
);
EXPECT_MAT_NEAR
(
dst_gold_mask
,
dst_mask
,
0.0
);
}
GPU_TEST_P
(
Bitwise_Array
,
Or
)
{
cv
::
gpu
::
GpuMat
dst
;
cv
::
gpu
::
bitwise_or
(
loadMat
(
src1
),
loadMat
(
src2
),
dst
);
cv
::
gpu
::
GpuMat
dst_nomask
,
dst_mask
(
src1
.
size
(),
src1
.
type
(),
cv
::
Scalar
::
all
(
0
));
cv
::
gpu
::
bitwise_or
(
loadMat
(
src1
,
useRoi
),
loadMat
(
src2
,
useRoi
),
dst_nomask
);
cv
::
gpu
::
bitwise_or
(
loadMat
(
src1
,
useRoi
),
loadMat
(
src2
,
useRoi
),
dst_mask
,
loadMat
(
mask
,
useRoi
));
cv
::
Mat
dst_gold
=
src1
|
src2
;
cv
::
Mat
dst_gold_nomask
,
dst_gold_mask
(
src1
.
size
(),
src1
.
type
(),
cv
::
Scalar
::
all
(
0
));
cv
::
bitwise_or
(
src1
,
src2
,
dst_gold_nomask
);
cv
::
bitwise_or
(
src1
,
src2
,
dst_gold_mask
,
mask
);
EXPECT_MAT_NEAR
(
dst_gold
,
dst
,
0.0
);
EXPECT_MAT_NEAR
(
dst_gold_nomask
,
dst_nomask
,
0.0
);
EXPECT_MAT_NEAR
(
dst_gold_mask
,
dst_mask
,
0.0
);
}
GPU_TEST_P
(
Bitwise_Array
,
And
)
{
cv
::
gpu
::
GpuMat
dst
;
cv
::
gpu
::
bitwise_and
(
loadMat
(
src1
),
loadMat
(
src2
),
dst
);
cv
::
gpu
::
GpuMat
dst_nomask
,
dst_mask
(
src1
.
size
(),
src1
.
type
(),
cv
::
Scalar
::
all
(
0
));
cv
::
gpu
::
bitwise_and
(
loadMat
(
src1
,
useRoi
),
loadMat
(
src2
,
useRoi
),
dst_nomask
);
cv
::
gpu
::
bitwise_and
(
loadMat
(
src1
,
useRoi
),
loadMat
(
src2
,
useRoi
),
dst_mask
,
loadMat
(
mask
,
useRoi
));
cv
::
Mat
dst_gold
=
src1
&
src2
;
cv
::
Mat
dst_gold_nomask
,
dst_gold_mask
(
src1
.
size
(),
src1
.
type
(),
cv
::
Scalar
::
all
(
0
));
cv
::
bitwise_and
(
src1
,
src2
,
dst_gold_nomask
);
cv
::
bitwise_and
(
src1
,
src2
,
dst_gold_mask
,
mask
);
EXPECT_MAT_NEAR
(
dst_gold
,
dst
,
0.0
);
EXPECT_MAT_NEAR
(
dst_gold_nomask
,
dst_nomask
,
0.0
);
EXPECT_MAT_NEAR
(
dst_gold_mask
,
dst_mask
,
0.0
);
}
GPU_TEST_P
(
Bitwise_Array
,
Xor
)
{
cv
::
gpu
::
GpuMat
dst
;
cv
::
gpu
::
bitwise_xor
(
loadMat
(
src1
),
loadMat
(
src2
),
dst
);
cv
::
gpu
::
GpuMat
dst_nomask
,
dst_mask
(
src1
.
size
(),
src1
.
type
(),
cv
::
Scalar
::
all
(
0
));
cv
::
gpu
::
bitwise_xor
(
loadMat
(
src1
,
useRoi
),
loadMat
(
src2
,
useRoi
),
dst_nomask
);
cv
::
gpu
::
bitwise_xor
(
loadMat
(
src1
,
useRoi
),
loadMat
(
src2
,
useRoi
),
dst_mask
,
loadMat
(
mask
,
useRoi
));
cv
::
Mat
dst_gold
=
src1
^
src2
;
cv
::
Mat
dst_gold_nomask
,
dst_gold_mask
(
src1
.
size
(),
src1
.
type
(),
cv
::
Scalar
::
all
(
0
));
cv
::
bitwise_xor
(
src1
,
src2
,
dst_gold_nomask
);
cv
::
bitwise_xor
(
src1
,
src2
,
dst_gold_mask
,
mask
);
EXPECT_MAT_NEAR
(
dst_gold
,
dst
,
0.0
);
EXPECT_MAT_NEAR
(
dst_gold_nomask
,
dst_nomask
,
0.0
);
EXPECT_MAT_NEAR
(
dst_gold_mask
,
dst_mask
,
0.0
);
}
INSTANTIATE_TEST_CASE_P
(
GPU_Core
,
Bitwise_Array
,
testing
::
Combine
(
ALL_DEVICES
,
DIFFERENT_SIZES
,
TYPES
(
CV_8U
,
CV_32S
,
1
,
4
)));
TYPES
(
CV_8U
,
CV_32S
,
1
,
4
),
WHOLE_SUBMAT
));
//////////////////////////////////////////////////////////////////////////////
// Bitwise_Scalar
...
...
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