Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
7fea7e06
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,发现更多精彩内容 >>
提交
7fea7e06
编写于
6月 30, 2016
作者:
V
Vadim Pisarevsky
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #6697 from wiryls:FileStorageBase64
上级
e4cd2453
df5a7c8e
变更
3
展开全部
显示空白变更内容
内联
并排
Showing
3 changed file
with
1622 addition
and
14 deletion
+1622
-14
modules/core/include/opencv2/core/persistence.hpp
modules/core/include/opencv2/core/persistence.hpp
+14
-1
modules/core/src/persistence.cpp
modules/core/src/persistence.cpp
+1460
-12
modules/core/test/test_io.cpp
modules/core/test/test_io.cpp
+148
-1
未找到文件。
modules/core/include/opencv2/core/persistence.hpp
浏览文件 @
7fea7e06
...
...
@@ -89,6 +89,8 @@ the extension of the opened file, ".xml" for XML files and ".yml" or ".yaml" for
*/
typedef
struct
CvFileStorage
CvFileStorage
;
typedef
struct
CvFileNode
CvFileNode
;
typedef
struct
CvMat
CvMat
;
typedef
struct
CvMatND
CvMatND
;
//! @} core_c
...
...
@@ -1238,6 +1240,17 @@ inline String::String(const FileNode& fn): cstr_(0), len_(0) { read(fn, *this, *
//! @endcond
CV_EXPORTS
void
cvStartWriteRawData_Base64
(
::
CvFileStorage
*
fs
,
const
char
*
name
,
int
len
,
const
char
*
dt
);
CV_EXPORTS
void
cvWriteRawData_Base64
(
::
CvFileStorage
*
fs
,
const
void
*
_data
,
int
len
);
CV_EXPORTS
void
cvEndWriteRawData_Base64
(
::
CvFileStorage
*
fs
);
CV_EXPORTS
void
cvWriteMat_Base64
(
::
CvFileStorage
*
fs
,
const
char
*
name
,
const
::
CvMat
*
mat
);
CV_EXPORTS
void
cvWriteMatND_Base64
(
::
CvFileStorage
*
fs
,
const
char
*
name
,
const
::
CvMatND
*
mat
);
}
// cv
#endif // __OPENCV_CORE_PERSISTENCE_HPP__
\ No newline at end of file
modules/core/src/persistence.cpp
浏览文件 @
7fea7e06
此差异已折叠。
点击以展开。
modules/core/test/test_io.cpp
浏览文件 @
7fea7e06
...
...
@@ -574,6 +574,153 @@ TEST(Core_InputOutput, FileStorageKey)
EXPECT_NO_THROW
(
f
<<
"key1"
<<
"value1"
);
EXPECT_NO_THROW
(
f
<<
"_key2"
<<
"value2"
);
EXPECT_NO_THROW
(
f
<<
"key_3"
<<
"value3"
);
const
std
::
string
expected
=
"%YAML
:1.0
\n
key1: value1
\n
_key2: value2
\n
key_3: value3
\n
"
;
const
std
::
string
expected
=
"%YAML
1.0
\n
---
\n
key1: value1
\n
_key2: value2
\n
key_3: value3
\n
"
;
ASSERT_STREQ
(
f
.
releaseAndGetString
().
c_str
(),
expected
.
c_str
());
}
TEST
(
Core_InputOutput
,
filestorage_yml_compatibility
)
{
// TODO:
}
class
CV_Base64IOTest
:
public
cvtest
::
BaseTest
{
private:
std
::
string
file_name
;
struct
data_t
{
uchar
u1
,
u2
;
int
i1
,
i2
,
i3
;
double
d1
,
d2
;
int
i4
;
};
public:
CV_Base64IOTest
(
std
::
string
const
&
test_file_name
)
:
file_name
(
test_file_name
)
{}
~
CV_Base64IOTest
()
{}
protected:
void
run
(
int
)
{
try
{
std
::
vector
<
data_t
>
rawdata
;
cv
::
Mat
_em_out
,
_em_in
;
cv
::
Mat
_2d_out
,
_2d_in
;
cv
::
Mat
_nd_out
,
_nd_in
;
{
/* init */
/* normal mat */
_2d_out
=
cv
::
Mat
(
100
,
100
,
CV_8UC3
,
cvScalar
(
1U
,
2U
,
127U
));
for
(
int
i
=
0
;
i
<
_2d_out
.
rows
;
++
i
)
for
(
int
j
=
0
;
j
<
_2d_out
.
cols
;
++
j
)
_2d_out
.
at
<
cv
::
Vec3b
>
(
i
,
j
)[
1
]
=
(
i
+
j
)
%
256
;
/* 4d mat */
const
int
Size
[]
=
{
4
,
4
,
4
,
4
};
cv
::
Mat
_4d
(
4
,
Size
,
CV_64FC4
,
cvScalar
(
0.888
,
0.111
,
0.666
,
0.444
));
const
cv
::
Range
ranges
[]
=
{
cv
::
Range
(
0
,
2
),
cv
::
Range
(
0
,
2
),
cv
::
Range
(
1
,
2
),
cv
::
Range
(
0
,
2
)
};
_nd_out
=
_4d
(
ranges
);
/* raw data */
for
(
int
i
=
0
;
i
<
1000
;
i
++
)
{
data_t
tmp
;
tmp
.
u1
=
1
;
tmp
.
u2
=
2
;
tmp
.
i1
=
1
;
tmp
.
i2
=
2
;
tmp
.
i3
=
3
;
tmp
.
d1
=
0.1
;
tmp
.
d2
=
0.2
;
tmp
.
i4
=
i
;
rawdata
.
push_back
(
tmp
);
}
}
{
/* write */
cv
::
FileStorage
fs
(
file_name
,
cv
::
FileStorage
::
WRITE
);
CvMat
holder
=
_2d_out
;
cv
::
cvWriteMat_Base64
(
*
fs
,
"normal_2d_mat"
,
&
holder
);
CvMatND
holder_nd
=
_nd_out
;
cv
::
cvWriteMatND_Base64
(
*
fs
,
"normal_nd_mat"
,
&
holder_nd
);
holder
=
_em_out
;
cv
::
cvWriteMat_Base64
(
*
fs
,
"empty_2d_mat"
,
&
holder
);
cv
::
cvStartWriteRawData_Base64
(
*
fs
,
"rawdata"
,
static_cast
<
int
>
(
rawdata
.
size
()),
"2u3i2di"
);
for
(
int
i
=
0
;
i
<
10
;
i
++
)
cv
::
cvWriteRawData_Base64
(
*
fs
,
rawdata
.
data
()
+
i
*
100
,
100
);
cv
::
cvEndWriteRawData_Base64
(
*
fs
);
fs
.
release
();
}
{
/* read */
cv
::
FileStorage
fs
(
file_name
,
cv
::
FileStorage
::
READ
);
/* mat */
fs
[
"empty_2d_mat"
]
>>
_em_in
;
fs
[
"normal_2d_mat"
]
>>
_2d_in
;
fs
[
"normal_nd_mat"
]
>>
_nd_in
;
/* raw data */
std
::
vector
<
data_t
>
(
1000
).
swap
(
rawdata
);
cvReadRawData
(
*
fs
,
fs
[
"rawdata"
].
node
,
rawdata
.
data
(),
"2u3i2di"
);
fs
.
release
();
}
for
(
int
i
=
0
;
i
<
1000
;
i
++
)
{
// TODO: Solve this bug in `cvReadRawData`
//EXPECT_EQ(rawdata[i].u1, 1);
//EXPECT_EQ(rawdata[i].u2, 2);
//EXPECT_EQ(rawdata[i].i1, 1);
//EXPECT_EQ(rawdata[i].i2, 2);
//EXPECT_EQ(rawdata[i].i3, 3);
//EXPECT_EQ(rawdata[i].d1, 0.1);
//EXPECT_EQ(rawdata[i].d2, 0.2);
//EXPECT_EQ(rawdata[i].i4, i);
}
EXPECT_EQ
(
_em_in
.
rows
,
_em_out
.
rows
);
EXPECT_EQ
(
_em_in
.
cols
,
_em_out
.
cols
);
EXPECT_EQ
(
_em_in
.
dims
,
_em_out
.
dims
);
EXPECT_EQ
(
_em_in
.
depth
(),
_em_out
.
depth
());
EXPECT_TRUE
(
_em_in
.
empty
());
EXPECT_EQ
(
_2d_in
.
rows
,
_2d_in
.
rows
);
EXPECT_EQ
(
_2d_in
.
cols
,
_2d_in
.
cols
);
EXPECT_EQ
(
_2d_in
.
dims
,
_2d_in
.
dims
);
EXPECT_EQ
(
_2d_in
.
depth
(),
_2d_in
.
depth
());
for
(
int
i
=
0
;
i
<
_2d_in
.
rows
;
++
i
)
for
(
int
j
=
0
;
j
<
_2d_in
.
cols
;
++
j
)
EXPECT_EQ
(
_2d_in
.
at
<
cv
::
Vec3b
>
(
i
,
j
),
_2d_out
.
at
<
cv
::
Vec3b
>
(
i
,
j
));
EXPECT_EQ
(
_nd_in
.
rows
,
_nd_in
.
rows
);
EXPECT_EQ
(
_nd_in
.
cols
,
_nd_in
.
cols
);
EXPECT_EQ
(
_nd_in
.
dims
,
_nd_in
.
dims
);
EXPECT_EQ
(
_nd_in
.
depth
(),
_nd_in
.
depth
());
EXPECT_EQ
(
cv
::
countNonZero
(
cv
::
mean
(
_nd_in
!=
_nd_out
)),
0
);
}
catch
(...)
{
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_MISMATCH
);
}
}
};
TEST
(
Core_InputOutput
,
filestorage_yml_base64
)
{
CV_Base64IOTest
test
(
"base64_test_tmp_file.yml"
);
test
.
safe_run
();
}
TEST
(
Core_InputOutput
,
filestorage_xml_base64
)
{
CV_Base64IOTest
test
(
"base64_test_tmp_file.xml"
);
test
.
safe_run
();
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录