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
7605426d
Commit
7605426d
authored
Oct 17, 2013
by
Andrey Pavlenko
Committed by
OpenCV Buildbot
Oct 17, 2013
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1613 from alalek:ocl_cvtcolor
parents
8b63e33b
ce0647c9
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
156 additions
and
110 deletions
+156
-110
test_color.cpp
modules/ocl/test/test_color.cpp
+156
-110
No files found.
modules/ocl/test/test_color.cpp
View file @
7605426d
...
@@ -46,148 +46,194 @@
...
@@ -46,148 +46,194 @@
#include "test_precomp.hpp"
#include "test_precomp.hpp"
#ifdef HAVE_OPENCL
#ifdef HAVE_OPENCL
//#define MAT_DEBUG
#ifdef MAT_DEBUG
#define MAT_DIFF(mat, mat2)\
{\
for(int i = 0; i < mat.rows; i ++)\
{\
for(int j = 0; j < mat.cols; j ++)\
{\
cv::Vec4b s = mat.at<cv::Vec4b>(i, j);\
cv::Vec4b s2 = mat2.at<cv::Vec4b>(i, j);\
if(s != s2) printf("*");\
else printf(".");\
}\
puts("\n");\
}\
}
#else
#define MAT_DIFF(mat, mat2)
#endif
namespace
namespace
{
{
using
namespace
testing
;
///////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////
// cvtColor
// cvtColor
PARAM_TEST_CASE
(
CvtColor
,
cv
::
Size
,
MatDepth
)
PARAM_TEST_CASE
(
CvtColor
,
MatDepth
,
bool
)
{
{
cv
::
Size
size
;
int
depth
;
int
depth
;
bool
use
R
oi
;
bool
use
_r
oi
;
cv
::
Mat
img
;
// src mat
cv
::
Mat
src1
;
cv
::
Mat
dst1
;
// src mat with roi
cv
::
Mat
src1_roi
;
cv
::
Mat
dst1_roi
;
// ocl dst mat for testing
cv
::
ocl
::
oclMat
gsrc1_whole
;
cv
::
ocl
::
oclMat
gdst1_whole
;
// ocl mat with roi
cv
::
ocl
::
oclMat
gsrc1_roi
;
cv
::
ocl
::
oclMat
gdst1_roi
;
virtual
void
SetUp
()
virtual
void
SetUp
()
{
{
size
=
GET_PARAM
(
0
);
depth
=
GET_PARAM
(
0
);
depth
=
GET_PARAM
(
1
);
use_roi
=
GET_PARAM
(
1
);
}
virtual
void
random_roi
(
int
channelsIn
,
int
channelsOut
)
{
const
int
srcType
=
CV_MAKE_TYPE
(
depth
,
channelsIn
);
const
int
dstType
=
CV_MAKE_TYPE
(
depth
,
channelsOut
);
Size
roiSize
=
randomSize
(
1
,
MAX_VALUE
);
Border
srcBorder
=
randomBorder
(
0
,
use_roi
?
MAX_VALUE
:
0
);
randomSubMat
(
src1
,
src1_roi
,
roiSize
,
srcBorder
,
srcType
,
2
,
100
);
Border
dst1Border
=
randomBorder
(
0
,
use_roi
?
MAX_VALUE
:
0
);
randomSubMat
(
dst1
,
dst1_roi
,
roiSize
,
dst1Border
,
dstType
,
5
,
16
);
generateOclMat
(
gsrc1_whole
,
gsrc1_roi
,
src1
,
roiSize
,
srcBorder
);
generateOclMat
(
gdst1_whole
,
gdst1_roi
,
dst1
,
roiSize
,
dst1Border
);
}
void
Near
(
double
threshold
=
1e-3
)
{
EXPECT_MAT_NEAR
(
dst1
,
gdst1_whole
,
threshold
);
EXPECT_MAT_NEAR
(
dst1_roi
,
gdst1_roi
,
threshold
);
}
void
doTest
(
int
channelsIn
,
int
channelsOut
,
int
code
)
{
for
(
int
j
=
0
;
j
<
LOOP_TIMES
;
j
++
)
{
random_roi
(
channelsIn
,
channelsOut
);
img
=
randomMat
(
size
,
CV_MAKE_TYPE
(
depth
,
3
),
0.0
,
depth
==
CV_32F
?
1.0
:
255.0
);
cv
::
cvtColor
(
src1_roi
,
dst1_roi
,
code
);
cv
::
ocl
::
cvtColor
(
gsrc1_roi
,
gdst1_roi
,
code
);
Near
();
}
}
}
};
};
#define CVTCODE(name) cv::COLOR_ ## name
#define CVTCODE(name) cv::COLOR_ ## name
#define OCL_TEST_P_CVTCOLOR(name) OCL_TEST_P(CvtColor, name)\
{\
OCL_TEST_P
(
CvtColor
,
RGB2GRAY
)
cv::Mat src = img;\
{
cv::ocl::oclMat ocl_img, dst;\
doTest
(
3
,
1
,
CVTCODE
(
RGB2GRAY
));
ocl_img.upload(img);\
cv::ocl::cvtColor(ocl_img, dst, CVTCODE(name));\
cv::Mat dst_gold;\
cv::cvtColor(src, dst_gold, CVTCODE(name));\
cv::Mat dst_mat;\
dst.download(dst_mat);\
EXPECT_MAT_NEAR(dst_gold, dst_mat, 1e-5);\
}
}
OCL_TEST_P
(
CvtColor
,
GRAY2RGB
)
{
doTest
(
1
,
3
,
CVTCODE
(
GRAY2RGB
));
};
//add new ones here using macro
OCL_TEST_P
(
CvtColor
,
BGR2GRAY
)
OCL_TEST_P_CVTCOLOR
(
RGB2GRAY
)
{
OCL_TEST_P_CVTCOLOR
(
BGR2GRAY
)
doTest
(
3
,
1
,
CVTCODE
(
BGR2GRAY
));
OCL_TEST_P_CVTCOLOR
(
RGBA2GRAY
)
}
OCL_TEST_P_CVTCOLOR
(
BGRA2GRAY
)
OCL_TEST_P
(
CvtColor
,
GRAY2BGR
)
{
doTest
(
1
,
3
,
CVTCODE
(
GRAY2BGR
));
};
OCL_TEST_P_CVTCOLOR
(
RGB2YUV
)
OCL_TEST_P
(
CvtColor
,
RGBA2GRAY
)
OCL_TEST_P_CVTCOLOR
(
BGR2YUV
)
{
OCL_TEST_P_CVTCOLOR
(
YUV2RGB
)
doTest
(
3
,
1
,
CVTCODE
(
RGBA2GRAY
));
OCL_TEST_P_CVTCOLOR
(
YUV2BGR
)
}
OCL_TEST_P_CVTCOLOR
(
RGB2YCrCb
)
OCL_TEST_P
(
CvtColor
,
GRAY2RGBA
)
OCL_TEST_P_CVTCOLOR
(
BGR2YCrCb
)
{
doTest
(
1
,
3
,
CVTCODE
(
GRAY2RGBA
));
};
PARAM_TEST_CASE
(
CvtColor_Gray2RGB
,
cv
::
Size
,
MatDepth
,
int
)
OCL_TEST_P
(
CvtColor
,
BGRA2GRAY
)
{
{
cv
::
Size
size
;
doTest
(
3
,
1
,
CVTCODE
(
BGRA2GRAY
));
int
code
;
}
int
depth
;
OCL_TEST_P
(
CvtColor
,
GRAY2BGRA
)
cv
::
Mat
img
;
{
doTest
(
1
,
3
,
CVTCODE
(
GRAY2BGRA
));
};
virtual
void
SetUp
()
OCL_TEST_P
(
CvtColor
,
RGB2YUV
)
{
doTest
(
3
,
3
,
CVTCODE
(
RGB2YUV
));
}
OCL_TEST_P
(
CvtColor
,
BGR2YUV
)
{
doTest
(
3
,
3
,
CVTCODE
(
BGR2YUV
));
}
OCL_TEST_P
(
CvtColor
,
YUV2RGB
)
{
doTest
(
3
,
3
,
CVTCODE
(
YUV2RGB
));
}
OCL_TEST_P
(
CvtColor
,
YUV2BGR
)
{
doTest
(
3
,
3
,
CVTCODE
(
YUV2BGR
));
}
OCL_TEST_P
(
CvtColor
,
RGB2YCrCb
)
{
doTest
(
3
,
3
,
CVTCODE
(
RGB2YCrCb
));
}
OCL_TEST_P
(
CvtColor
,
BGR2YCrCb
)
{
doTest
(
3
,
3
,
CVTCODE
(
BGR2YCrCb
));
}
struct
CvtColor_YUV420
:
CvtColor
{
void
random_roi
(
int
channelsIn
,
int
channelsOut
)
{
{
size
=
GET_PARAM
(
0
);
const
int
srcType
=
CV_MAKE_TYPE
(
depth
,
channelsIn
);
depth
=
GET_PARAM
(
1
);
const
int
dstType
=
CV_MAKE_TYPE
(
depth
,
channelsOut
);
code
=
GET_PARAM
(
2
);
img
=
randomMat
(
size
,
CV_MAKETYPE
(
depth
,
1
),
0.0
,
depth
==
CV_32F
?
1.0
:
255.0
);
Size
roiSize
=
randomSize
(
1
,
MAX_VALUE
);
roiSize
.
width
*=
2
;
roiSize
.
height
*=
3
;
Border
srcBorder
=
randomBorder
(
0
,
use_roi
?
MAX_VALUE
:
0
);
randomSubMat
(
src1
,
src1_roi
,
roiSize
,
srcBorder
,
srcType
,
2
,
100
);
Border
dst1Border
=
randomBorder
(
0
,
use_roi
?
MAX_VALUE
:
0
);
randomSubMat
(
dst1
,
dst1_roi
,
roiSize
,
dst1Border
,
dstType
,
5
,
16
);
generateOclMat
(
gsrc1_whole
,
gsrc1_roi
,
src1
,
roiSize
,
srcBorder
);
generateOclMat
(
gdst1_whole
,
gdst1_roi
,
dst1
,
roiSize
,
dst1Border
);
}
}
};
};
OCL_TEST_P
(
CvtColor_Gray2RGB
,
Accuracy
)
{
cv
::
Mat
src
=
img
;
cv
::
ocl
::
oclMat
ocl_img
,
dst
;
ocl_img
.
upload
(
src
);
cv
::
ocl
::
cvtColor
(
ocl_img
,
dst
,
code
);
cv
::
Mat
dst_gold
;
cv
::
cvtColor
(
src
,
dst_gold
,
code
);
cv
::
Mat
dst_mat
;
dst
.
download
(
dst_mat
);
EXPECT_MAT_NEAR
(
dst_gold
,
dst_mat
,
1e-5
);
}
OCL_TEST_P
(
CvtColor_YUV420
,
YUV2RGBA_NV12
)
{
doTest
(
1
,
4
,
CV_YUV2RGBA_NV12
);
};
PARAM_TEST_CASE
(
CvtColor_YUV420
,
cv
::
Size
,
int
)
OCL_TEST_P
(
CvtColor_YUV420
,
YUV2BGRA_NV12
)
{
{
cv
::
Size
size
;
doTest
(
1
,
4
,
CV_YUV2BGRA_NV12
)
;
int
code
;
}
;
cv
::
Mat
img
;
OCL_TEST_P
(
CvtColor_YUV420
,
YUV2RGB_NV12
)
{
doTest
(
1
,
3
,
CV_YUV2RGB_NV12
);
};
virtual
void
SetUp
()
OCL_TEST_P
(
CvtColor_YUV420
,
YUV2BGR_NV12
)
{
{
size
=
GET_PARAM
(
0
);
doTest
(
1
,
3
,
CV_YUV2BGR_NV12
);
code
=
GET_PARAM
(
1
);
img
=
randomMat
(
size
,
CV_8UC1
,
0.0
,
255.0
);
}
};
};
OCL_TEST_P
(
CvtColor_YUV420
,
Accuracy
)
{
cv
::
Mat
src
=
img
;
cv
::
ocl
::
oclMat
ocl_img
,
dst
;
ocl_img
.
upload
(
src
);
cv
::
ocl
::
cvtColor
(
ocl_img
,
dst
,
code
);
cv
::
Mat
dst_gold
;
cv
::
cvtColor
(
src
,
dst_gold
,
code
);
cv
::
Mat
dst_mat
;
dst
.
download
(
dst_mat
);
MAT_DIFF
(
dst_mat
,
dst_gold
);
EXPECT_MAT_NEAR
(
dst_gold
,
dst_mat
,
1e-5
);
}
INSTANTIATE_TEST_CASE_P
(
OCL_ImgProc
,
CvtColor
,
testing
::
Combine
(
INSTANTIATE_TEST_CASE_P
(
OCL_ImgProc
,
CvtColor
,
DIFFERENT_SIZES
,
testing
::
Combine
(
testing
::
Values
(
MatDepth
(
CV_8U
),
MatDepth
(
CV_16U
),
MatDepth
(
CV_32F
))
testing
::
Values
(
MatDepth
(
CV_8U
),
MatDepth
(
CV_16U
),
MatDepth
(
CV_32F
)),
));
Bool
()
)
INSTANTIATE_TEST_CASE_P
(
OCL_ImgProc
,
CvtColor_YUV420
,
testing
::
Combine
(
);
testing
::
Values
(
cv
::
Size
(
128
,
45
),
cv
::
Size
(
46
,
132
),
cv
::
Size
(
1024
,
1023
)),
testing
::
Values
((
int
)
CV_YUV2RGBA_NV12
,
(
int
)
CV_YUV2BGRA_NV12
,
(
int
)
CV_YUV2RGB_NV12
,
(
int
)
CV_YUV2BGR_NV12
)
INSTANTIATE_TEST_CASE_P
(
OCL_ImgProc
,
CvtColor_YUV420
,
));
testing
::
Combine
(
testing
::
Values
(
MatDepth
(
CV_8U
)),
INSTANTIATE_TEST_CASE_P
(
OCL_ImgProc
,
CvtColor_Gray2RGB
,
testing
::
Combine
(
Bool
()
DIFFERENT_SIZES
,
)
testing
::
Values
(
MatDepth
(
CV_8U
),
MatDepth
(
CV_16U
),
MatDepth
(
CV_32F
)),
);
testing
::
Values
((
int
)
CV_GRAY2BGR
,
(
int
)
CV_GRAY2BGRA
,
(
int
)
CV_GRAY2RGB
,
(
int
)
CV_GRAY2RGBA
)
));
}
}
#endif
#endif
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