Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
ce0647c9
O
Opencv
项目概览
Greenplum
/
Opencv
大约 1 年 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ce0647c9
编写于
10月 12, 2013
作者:
A
Alexander Alekhin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ocl: rewrite CvtColor tests, added roi support
上级
bfdbc9ce
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
156 addition
and
110 deletion
+156
-110
modules/ocl/test/test_color.cpp
modules/ocl/test/test_color.cpp
+156
-110
未找到文件。
modules/ocl/test/test_color.cpp
浏览文件 @
ce0647c9
...
...
@@ -46,148 +46,194 @@
#include "test_precomp.hpp"
#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
{
using
namespace
testing
;
///////////////////////////////////////////////////////////////////////////////////////////////////////
// cvtColor
PARAM_TEST_CASE
(
CvtColor
,
cv
::
Size
,
MatDepth
)
PARAM_TEST_CASE
(
CvtColor
,
MatDepth
,
bool
)
{
cv
::
Size
size
;
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
()
{
size
=
GET_PARAM
(
0
);
depth
=
GET_PARAM
(
1
);
depth
=
GET_PARAM
(
0
);
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 OCL_TEST_P_CVTCOLOR(name) OCL_TEST_P(CvtColor, name)\
{\
cv::Mat src = img;\
cv::ocl::oclMat ocl_img, dst;\
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
,
RGB2GRAY
)
{
doTest
(
3
,
1
,
CVTCODE
(
RGB2GRAY
));
}
OCL_TEST_P
(
CvtColor
,
GRAY2RGB
)
{
doTest
(
1
,
3
,
CVTCODE
(
GRAY2RGB
));
};
//add new ones here using macro
OCL_TEST_P_CVTCOLOR
(
RGB2GRAY
)
OCL_TEST_P_CVTCOLOR
(
BGR2GRAY
)
OCL_TEST_P_CVTCOLOR
(
RGBA2GRAY
)
OCL_TEST_P_CVTCOLOR
(
BGRA2GRAY
)
OCL_TEST_P
(
CvtColor
,
BGR2GRAY
)
{
doTest
(
3
,
1
,
CVTCODE
(
BGR2GRAY
));
}
OCL_TEST_P
(
CvtColor
,
GRAY2BGR
)
{
doTest
(
1
,
3
,
CVTCODE
(
GRAY2BGR
));
};
OCL_TEST_P_CVTCOLOR
(
RGB2YUV
)
OCL_TEST_P_CVTCOLOR
(
BGR2YUV
)
OCL_TEST_P_CVTCOLOR
(
YUV2RGB
)
OCL_TEST_P_CVTCOLOR
(
YUV2BGR
)
OCL_TEST_P_CVTCOLOR
(
RGB2YCrCb
)
OCL_TEST_P_CVTCOLOR
(
BGR2YCrCb
)
OCL_TEST_P
(
CvtColor
,
RGBA2GRAY
)
{
doTest
(
3
,
1
,
CVTCODE
(
RGBA2GRAY
));
}
OCL_TEST_P
(
CvtColor
,
GRAY2RGBA
)
{
doTest
(
1
,
3
,
CVTCODE
(
GRAY2RGBA
));
};
PARAM_TEST_CASE
(
CvtColor_Gray2RGB
,
cv
::
Size
,
MatDepth
,
int
)
OCL_TEST_P
(
CvtColor
,
BGRA2GRAY
)
{
cv
::
Size
size
;
int
code
;
int
depth
;
cv
::
Mat
img
;
doTest
(
3
,
1
,
CVTCODE
(
BGRA2GRAY
));
}
OCL_TEST_P
(
CvtColor
,
GRAY2BGRA
)
{
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
);
depth
=
GET_PARAM
(
1
);
code
=
GET_PARAM
(
2
);
img
=
randomMat
(
size
,
CV_MAKETYPE
(
depth
,
1
),
0.0
,
depth
==
CV_32F
?
1.0
:
255.0
);
const
int
srcType
=
CV_MAKE_TYPE
(
depth
,
channelsIn
);
const
int
dstType
=
CV_MAKE_TYPE
(
depth
,
channelsOut
);
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
;
int
code
;
doTest
(
1
,
4
,
CV_YUV2BGRA_NV12
)
;
}
;
cv
::
Mat
img
;
OCL_TEST_P
(
CvtColor_YUV420
,
YUV2RGB_NV12
)
{
doTest
(
1
,
3
,
CV_YUV2RGB_NV12
);
};
virtual
void
SetUp
()
{
size
=
GET_PARAM
(
0
);
code
=
GET_PARAM
(
1
);
img
=
randomMat
(
size
,
CV_8UC1
,
0.0
,
255.0
);
}
OCL_TEST_P
(
CvtColor_YUV420
,
YUV2BGR_NV12
)
{
doTest
(
1
,
3
,
CV_YUV2BGR_NV12
);
};
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
(
DIFFERENT_SIZES
,
testing
::
Values
(
MatDepth
(
CV_8U
),
MatDepth
(
CV_16U
),
MatDepth
(
CV_32F
))
));
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_Gray2RGB
,
testing
::
Combine
(
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
)
));
INSTANTIATE_TEST_CASE_P
(
OCL_ImgProc
,
CvtColor
,
testing
::
Combine
(
testing
::
Values
(
MatDepth
(
CV_8U
),
MatDepth
(
CV_16U
),
MatDepth
(
CV_32F
)),
Bool
()
)
);
INSTANTIATE_TEST_CASE_P
(
OCL_ImgProc
,
CvtColor_YUV420
,
testing
::
Combine
(
testing
::
Values
(
MatDepth
(
CV_8U
)),
Bool
()
)
);
}
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录