Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
525b6eca
O
Opencv
项目概览
Greenplum
/
Opencv
11 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
525b6eca
编写于
8月 26, 2013
作者:
R
Roman Donchenko
提交者:
OpenCV Buildbot
8月 26, 2013
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1311 from leszekhanusz:png_palette_alpha
上级
b43890a7
32635a68
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
111 addition
and
10 deletion
+111
-10
modules/highgui/src/grfmt_png.cpp
modules/highgui/src/grfmt_png.cpp
+19
-10
modules/highgui/test/test_grfmt.cpp
modules/highgui/test/test_grfmt.cpp
+92
-0
未找到文件。
modules/highgui/src/grfmt_png.cpp
浏览文件 @
525b6eca
...
...
@@ -171,7 +171,9 @@ bool PngDecoder::readHeader()
if
(
!
m_buf
.
empty
()
||
m_f
)
{
png_uint_32
wdth
,
hght
;
int
bit_depth
,
color_type
;
int
bit_depth
,
color_type
,
num_trans
=
0
;
png_bytep
trans
;
png_color_16p
trans_values
;
png_read_info
(
png_ptr
,
info_ptr
);
...
...
@@ -187,15 +189,22 @@ bool PngDecoder::readHeader()
{
switch
(
color_type
)
{
case
PNG_COLOR_TYPE_RGB
:
case
PNG_COLOR_TYPE_PALETTE
:
m_type
=
CV_8UC3
;
break
;
case
PNG_COLOR_TYPE_RGB_ALPHA
:
m_type
=
CV_8UC4
;
break
;
default:
m_type
=
CV_8UC1
;
case
PNG_COLOR_TYPE_RGB
:
m_type
=
CV_8UC3
;
break
;
case
PNG_COLOR_TYPE_PALETTE
:
png_get_tRNS
(
png_ptr
,
info_ptr
,
&
trans
,
&
num_trans
,
&
trans_values
);
//Check if there is a transparency value in the palette
if
(
num_trans
>
0
)
m_type
=
CV_8UC4
;
else
m_type
=
CV_8UC3
;
break
;
case
PNG_COLOR_TYPE_RGB_ALPHA
:
m_type
=
CV_8UC4
;
break
;
default:
m_type
=
CV_8UC1
;
}
if
(
bit_depth
==
16
)
m_type
=
CV_MAKETYPE
(
CV_16U
,
CV_MAT_CN
(
m_type
));
...
...
modules/highgui/test/test_grfmt.cpp
浏览文件 @
525b6eca
...
...
@@ -280,6 +280,98 @@ TEST(Highgui_ImreadVSCvtColor, regression)
EXPECT_LT
(
actual_avg_diff
,
MAX_MEAN_DIFF
);
EXPECT_LT
(
actual_maxval
,
MAX_ABS_DIFF
);
}
//Test OpenCV issue 3075 is solved
class
CV_GrfmtReadPNGColorPaletteWithAlphaTest
:
public
cvtest
::
BaseTest
{
public:
void
run
(
int
)
{
try
{
// First Test : Read PNG with alpha, imread flag -1
Mat
img
=
imread
(
string
(
ts
->
get_data_path
())
+
"readwrite/color_palette_alpha.png"
,
-
1
);
if
(
img
.
empty
())
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_INVALID_TEST_DATA
);
ASSERT_TRUE
(
img
.
channels
()
==
4
);
unsigned
char
*
img_data
=
(
unsigned
char
*
)
img
.
data
;
// Verification first pixel is red in BGRA
ASSERT_TRUE
(
img_data
[
0
]
==
0x00
);
ASSERT_TRUE
(
img_data
[
1
]
==
0x00
);
ASSERT_TRUE
(
img_data
[
2
]
==
0xFF
);
ASSERT_TRUE
(
img_data
[
3
]
==
0xFF
);
// Verification second pixel is red in BGRA
ASSERT_TRUE
(
img_data
[
4
]
==
0x00
);
ASSERT_TRUE
(
img_data
[
5
]
==
0x00
);
ASSERT_TRUE
(
img_data
[
6
]
==
0xFF
);
ASSERT_TRUE
(
img_data
[
7
]
==
0xFF
);
// Second Test : Read PNG without alpha, imread flag -1
img
=
imread
(
string
(
ts
->
get_data_path
())
+
"readwrite/color_palette_no_alpha.png"
,
-
1
);
if
(
img
.
empty
())
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_INVALID_TEST_DATA
);
ASSERT_TRUE
(
img
.
channels
()
==
3
);
img_data
=
(
unsigned
char
*
)
img
.
data
;
// Verification first pixel is red in BGR
ASSERT_TRUE
(
img_data
[
0
]
==
0x00
);
ASSERT_TRUE
(
img_data
[
1
]
==
0x00
);
ASSERT_TRUE
(
img_data
[
2
]
==
0xFF
);
// Verification second pixel is red in BGR
ASSERT_TRUE
(
img_data
[
3
]
==
0x00
);
ASSERT_TRUE
(
img_data
[
4
]
==
0x00
);
ASSERT_TRUE
(
img_data
[
5
]
==
0xFF
);
// Third Test : Read PNG with alpha, imread flag 1
img
=
imread
(
string
(
ts
->
get_data_path
())
+
"readwrite/color_palette_alpha.png"
,
1
);
if
(
img
.
empty
())
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_INVALID_TEST_DATA
);
ASSERT_TRUE
(
img
.
channels
()
==
3
);
img_data
=
(
unsigned
char
*
)
img
.
data
;
// Verification first pixel is red in BGR
ASSERT_TRUE
(
img_data
[
0
]
==
0x00
);
ASSERT_TRUE
(
img_data
[
1
]
==
0x00
);
ASSERT_TRUE
(
img_data
[
2
]
==
0xFF
);
// Verification second pixel is red in BGR
ASSERT_TRUE
(
img_data
[
3
]
==
0x00
);
ASSERT_TRUE
(
img_data
[
4
]
==
0x00
);
ASSERT_TRUE
(
img_data
[
5
]
==
0xFF
);
// Fourth Test : Read PNG without alpha, imread flag 1
img
=
imread
(
string
(
ts
->
get_data_path
())
+
"readwrite/color_palette_no_alpha.png"
,
1
);
if
(
img
.
empty
())
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_INVALID_TEST_DATA
);
ASSERT_TRUE
(
img
.
channels
()
==
3
);
img_data
=
(
unsigned
char
*
)
img
.
data
;
// Verification first pixel is red in BGR
ASSERT_TRUE
(
img_data
[
0
]
==
0x00
);
ASSERT_TRUE
(
img_data
[
1
]
==
0x00
);
ASSERT_TRUE
(
img_data
[
2
]
==
0xFF
);
// Verification second pixel is red in BGR
ASSERT_TRUE
(
img_data
[
3
]
==
0x00
);
ASSERT_TRUE
(
img_data
[
4
]
==
0x00
);
ASSERT_TRUE
(
img_data
[
5
]
==
0xFF
);
}
catch
(...)
{
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_EXCEPTION
);
}
ts
->
set_failed_test_info
(
cvtest
::
TS
::
OK
);
}
};
TEST
(
Highgui_Image
,
read_png_color_palette_with_alpha
)
{
CV_GrfmtReadPNGColorPaletteWithAlphaTest
test
;
test
.
safe_run
();
}
#endif
#ifdef HAVE_JPEG
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录