Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
3163cfb8
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,发现更多精彩内容 >>
提交
3163cfb8
编写于
11月 21, 2010
作者:
V
Vadim Pisarevsky
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
added 16-bit tiff support, enabled LZW codec in tiff (tickets #588, #590)
上级
2c03c14f
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
148 addition
and
34 deletion
+148
-34
3rdparty/zlib/zutil.c
3rdparty/zlib/zutil.c
+1
-1
modules/highgui/src/grfmt_pxm.cpp
modules/highgui/src/grfmt_pxm.cpp
+1
-1
modules/highgui/src/grfmt_tiff.cpp
modules/highgui/src/grfmt_tiff.cpp
+96
-25
modules/highgui/src/utils.cpp
modules/highgui/src/utils.cpp
+39
-4
modules/highgui/src/utils.hpp
modules/highgui/src/utils.hpp
+11
-3
未找到文件。
3rdparty/zlib/zutil.c
浏览文件 @
3163cfb8
...
...
@@ -115,7 +115,7 @@ uLong ZEXPORT zlibCompileFlags()
#ifdef DEBUG
# ifndef verbose
# define verbose
0
# define verbose
-1
# endif
int
ZLIB_INTERNAL
z_verbose
=
verbose
;
...
...
modules/highgui/src/grfmt_pxm.cpp
浏览文件 @
3163cfb8
...
...
@@ -324,7 +324,7 @@ bool PxMDecoder::readData( Mat& img )
else
if
(
img
.
depth
()
==
CV_8U
)
icvCvt_BGR2Gray_8u_C3C1R
(
src
,
0
,
data
,
0
,
cvSize
(
m_width
,
1
),
2
);
else
icvCvt_BGR
2Gray_16u_C3C1R
(
(
ushort
*
)
src
,
0
,
(
ushort
*
)
data
,
0
,
cvSize
(
m_width
,
1
)
,
2
);
icvCvt_BGR
A2Gray_16u_CnC1R
(
(
ushort
*
)
src
,
0
,
(
ushort
*
)
data
,
0
,
cvSize
(
m_width
,
1
),
3
,
2
);
}
}
result
=
true
;
...
...
modules/highgui/src/grfmt_tiff.cpp
浏览文件 @
3163cfb8
...
...
@@ -122,15 +122,19 @@ bool TiffDecoder::readHeader()
if
(
TIFFRGBAImageOK
(
tif
,
errmsg
)
&&
TIFFGetField
(
tif
,
TIFFTAG_IMAGEWIDTH
,
&
width
)
&&
TIFFGetField
(
tif
,
TIFFTAG_IMAGELENGTH
,
&
height
)
&&
TIFFGetField
(
tif
,
TIFFTAG_PHOTOMETRIC
,
&
photometric
)
&&
(
!
TIFFGetField
(
tif
,
TIFFTAG_COMPRESSION
,
&
compression
)
||
(
compression
!=
COMPRESSION_LZW
&&
compression
!=
COMPRESSION_OJPEG
)))
TIFFGetField
(
tif
,
TIFFTAG_PHOTOMETRIC
,
&
photometric
))
{
int
bpp
=
8
,
ncn
=
photometric
>
1
?
3
:
1
;
TIFFGetField
(
tif
,
TIFFTAG_BITSPERSAMPLE
,
&
bpp
);
TIFFGetField
(
tif
,
TIFFTAG_SAMPLESPERPIXEL
,
&
ncn
);
m_width
=
width
;
m_height
=
height
;
m_type
=
photometric
>
1
?
CV_8UC3
:
CV_8UC1
;
if
(
bpp
>
8
&&
((
photometric
!=
2
&&
photometric
!=
1
)
||
(
ncn
!=
1
&&
ncn
!=
3
&&
ncn
!=
4
)))
bpp
=
8
;
m_type
=
CV_MAKETYPE
(
bpp
>
8
?
CV_16U
:
CV_8U
,
photometric
>
1
?
3
:
1
);
result
=
true
;
}
}
...
...
@@ -148,6 +152,9 @@ bool TiffDecoder::readData( Mat& img )
bool
color
=
img
.
channels
()
>
1
;
uchar
*
data
=
img
.
data
;
int
step
=
(
int
)
img
.
step
;
if
(
img
.
depth
()
!=
CV_8U
&&
img
.
depth
()
!=
CV_16U
)
return
false
;
if
(
m_tif
&&
m_width
&&
m_height
)
{
...
...
@@ -155,6 +162,12 @@ bool TiffDecoder::readData( Mat& img )
int
tile_width0
=
m_width
,
tile_height0
=
0
;
int
x
,
y
,
i
;
int
is_tiled
=
TIFFIsTiled
(
tif
);
int
photometric
;
TIFFGetField
(
tif
,
TIFFTAG_PHOTOMETRIC
,
&
photometric
);
int
bpp
=
8
,
ncn
=
photometric
>
1
?
3
:
1
;
TIFFGetField
(
tif
,
TIFFTAG_BITSPERSAMPLE
,
&
bpp
);
TIFFGetField
(
tif
,
TIFFTAG_SAMPLESPERPIXEL
,
&
ncn
);
int
dst_bpp
=
img
.
depth
()
==
CV_8U
?
8
:
16
;
if
(
(
!
is_tiled
&&
TIFFGetField
(
tif
,
TIFFTAG_ROWSPERSTRIP
,
&
tile_height0
))
||
...
...
@@ -168,8 +181,10 @@ bool TiffDecoder::readData( Mat& img )
if
(
tile_height0
<=
0
)
tile_height0
=
m_height
;
AutoBuffer
<
uchar
>
_buffer
(
tile_height0
*
tile_width0
*
4
);
AutoBuffer
<
uchar
>
_buffer
(
tile_height0
*
tile_width0
*
8
);
uchar
*
buffer
=
_buffer
;
ushort
*
buffer16
=
(
ushort
*
)
buffer
;
int
tileidx
=
0
;
for
(
y
=
0
;
y
<
m_height
;
y
+=
tile_height0
,
data
+=
step
*
tile_height0
)
{
...
...
@@ -178,33 +193,89 @@ bool TiffDecoder::readData( Mat& img )
if
(
y
+
tile_height
>
m_height
)
tile_height
=
m_height
-
y
;
for
(
x
=
0
;
x
<
m_width
;
x
+=
tile_width0
)
for
(
x
=
0
;
x
<
m_width
;
x
+=
tile_width0
,
tileidx
++
)
{
int
tile_width
=
tile_width0
,
ok
;
if
(
x
+
tile_width
>
m_width
)
tile_width
=
m_width
-
x
;
if
(
!
is_tiled
)
ok
=
TIFFReadRGBAStrip
(
tif
,
y
,
(
uint32
*
)
buffer
);
else
ok
=
TIFFReadRGBATile
(
tif
,
x
,
y
,
(
uint32
*
)
buffer
);
if
(
!
ok
)
if
(
dst_bpp
==
8
)
{
close
();
return
false
;
if
(
!
is_tiled
)
ok
=
TIFFReadRGBAStrip
(
tif
,
y
,
(
uint32
*
)
buffer
);
else
ok
=
TIFFReadRGBATile
(
tif
,
x
,
y
,
(
uint32
*
)
buffer
);
if
(
!
ok
)
{
close
();
return
false
;
}
for
(
i
=
0
;
i
<
tile_height
;
i
++
)
if
(
color
)
icvCvt_BGRA2BGR_8u_C4C3R
(
buffer
+
i
*
tile_width
*
4
,
0
,
data
+
x
*
3
+
step
*
(
tile_height
-
i
-
1
),
0
,
cvSize
(
tile_width
,
1
),
2
);
else
icvCvt_BGRA2Gray_8u_C4C1R
(
buffer
+
i
*
tile_width
*
4
,
0
,
data
+
x
+
step
*
(
tile_height
-
i
-
1
),
0
,
cvSize
(
tile_width
,
1
),
2
);
}
for
(
i
=
0
;
i
<
tile_height
;
i
++
)
if
(
color
)
icvCvt_BGRA2BGR_8u_C4C3R
(
buffer
+
i
*
tile_width
*
4
,
0
,
data
+
x
*
3
+
step
*
(
tile_height
-
i
-
1
),
0
,
cvSize
(
tile_width
,
1
),
2
);
else
{
if
(
!
is_tiled
)
ok
=
TIFFReadEncodedStrip
(
tif
,
tileidx
,
(
uint32
*
)
buffer
,
-
1
);
else
icvCvt_BGRA2Gray_8u_C4C1R
(
buffer
+
i
*
tile_width
*
4
,
0
,
data
+
x
+
step
*
(
tile_height
-
i
-
1
),
0
,
cvSize
(
tile_width
,
1
),
2
);
ok
=
TIFFReadEncodedTile
(
tif
,
tileidx
,
(
uint32
*
)
buffer
,
-
1
);
if
(
!
ok
)
{
close
();
return
false
;
}
for
(
i
=
0
;
i
<
tile_height
;
i
++
)
{
if
(
color
)
{
if
(
ncn
==
1
)
{
icvCvt_Gray2BGR_16u_C1C3R
(
buffer16
+
i
*
tile_width
*
ncn
,
0
,
(
ushort
*
)(
data
+
step
*
i
)
+
x
*
3
,
0
,
cvSize
(
tile_width
,
1
)
);
}
else
if
(
ncn
==
3
)
{
icvCvt_RGB2BGR_16u_C3R
(
buffer16
+
i
*
tile_width
*
ncn
,
0
,
(
ushort
*
)(
data
+
step
*
i
)
+
x
*
3
,
0
,
cvSize
(
tile_width
,
1
)
);
}
else
{
icvCvt_BGRA2BGR_16u_C4C3R
(
buffer16
+
i
*
tile_width
*
ncn
,
0
,
(
ushort
*
)(
data
+
step
*
i
)
+
x
*
3
,
0
,
cvSize
(
tile_width
,
1
),
2
);
}
}
else
{
if
(
ncn
==
1
)
{
memcpy
((
ushort
*
)(
data
+
step
*
i
)
+
x
,
buffer16
+
i
*
tile_width
*
ncn
,
tile_width
*
sizeof
(
buffer16
[
0
]));
}
else
{
icvCvt_BGRA2Gray_16u_CnC1R
(
buffer16
+
i
*
tile_width
*
ncn
,
0
,
(
ushort
*
)(
data
+
step
*
i
)
+
x
,
0
,
cvSize
(
tile_width
,
1
),
ncn
,
2
);
}
}
}
}
}
}
...
...
modules/highgui/src/utils.cpp
浏览文件 @
3163cfb8
...
...
@@ -66,21 +66,21 @@ void icvCvt_BGR2Gray_8u_C3C1R( const uchar* rgb, int rgb_step,
}
void
icvCvt_BGR
2Gray_16u_C3
C1R
(
const
ushort
*
rgb
,
int
rgb_step
,
void
icvCvt_BGR
A2Gray_16u_Cn
C1R
(
const
ushort
*
rgb
,
int
rgb_step
,
ushort
*
gray
,
int
gray_step
,
CvSize
size
,
int
_swap_rb
)
CvSize
size
,
int
ncn
,
int
_swap_rb
)
{
int
i
;
int
swap_rb
=
_swap_rb
?
2
:
0
;
for
(
;
size
.
height
--
;
gray
+=
gray_step
)
{
for
(
i
=
0
;
i
<
size
.
width
;
i
++
,
rgb
+=
3
)
for
(
i
=
0
;
i
<
size
.
width
;
i
++
,
rgb
+=
ncn
)
{
int
t
=
descale
(
rgb
[
swap_rb
]
*
cB
+
rgb
[
1
]
*
cG
+
rgb
[
swap_rb
^
2
]
*
cR
,
SCALE
);
gray
[
i
]
=
(
ushort
)
t
;
}
rgb
+=
rgb_step
-
size
.
width
*
3
;
rgb
+=
rgb_step
-
size
.
width
*
ncn
;
}
}
...
...
@@ -119,6 +119,21 @@ void icvCvt_Gray2BGR_8u_C1C3R( const uchar* gray, int gray_step,
}
void
icvCvt_Gray2BGR_16u_C1C3R
(
const
ushort
*
gray
,
int
gray_step
,
ushort
*
bgr
,
int
bgr_step
,
CvSize
size
)
{
int
i
;
for
(
;
size
.
height
--
;
gray
+=
gray_step
/
sizeof
(
gray
[
0
])
)
{
for
(
i
=
0
;
i
<
size
.
width
;
i
++
,
bgr
+=
3
)
{
bgr
[
0
]
=
bgr
[
1
]
=
bgr
[
2
]
=
gray
[
i
];
}
bgr
+=
bgr_step
/
sizeof
(
bgr
[
0
])
-
size
.
width
*
3
;
}
}
void
icvCvt_BGRA2BGR_8u_C4C3R
(
const
uchar
*
bgra
,
int
bgra_step
,
uchar
*
bgr
,
int
bgr_step
,
CvSize
size
,
int
_swap_rb
)
...
...
@@ -139,6 +154,26 @@ void icvCvt_BGRA2BGR_8u_C4C3R( const uchar* bgra, int bgra_step,
}
void
icvCvt_BGRA2BGR_16u_C4C3R
(
const
ushort
*
bgra
,
int
bgra_step
,
ushort
*
bgr
,
int
bgr_step
,
CvSize
size
,
int
_swap_rb
)
{
int
i
;
int
swap_rb
=
_swap_rb
?
2
:
0
;
for
(
;
size
.
height
--
;
)
{
for
(
i
=
0
;
i
<
size
.
width
;
i
++
,
bgr
+=
3
,
bgra
+=
4
)
{
uchar
t0
=
bgra
[
swap_rb
],
t1
=
bgra
[
1
];
bgr
[
0
]
=
t0
;
bgr
[
1
]
=
t1
;
t0
=
bgra
[
swap_rb
^
2
];
bgr
[
2
]
=
t0
;
}
bgr
+=
bgr_step
/
sizeof
(
bgr
[
0
])
-
size
.
width
*
3
;
bgra
+=
bgra_step
/
sizeof
(
bgra
[
0
])
-
size
.
width
*
4
;
}
}
void
icvCvt_BGRA2RGBA_8u_C4R
(
const
uchar
*
bgra
,
int
bgra_step
,
uchar
*
rgba
,
int
rgba_step
,
CvSize
size
)
{
...
...
modules/highgui/src/utils.hpp
浏览文件 @
3163cfb8
...
...
@@ -55,20 +55,28 @@ struct PaletteEntry
#define descale(x,n) (((x) + (1 << ((n)-1))) >> (n))
#define saturate(x) (uchar)(((x) & ~255) == 0 ? (x) : ~((x)>>31))
void
icvCvt_BGR2Gray_16u_C3C1R
(
const
ushort
*
bgr
,
int
bgr_step
,
ushort
*
gray
,
int
gray_step
,
CvSize
size
,
int
swap_rb
=
0
);
void
icvCvt_BGR2Gray_8u_C3C1R
(
const
uchar
*
bgr
,
int
bgr_step
,
uchar
*
gray
,
int
gray_step
,
CvSize
size
,
int
swap_rb
=
0
);
void
icvCvt_BGRA2Gray_8u_C4C1R
(
const
uchar
*
bgra
,
int
bgra_step
,
uchar
*
gray
,
int
gray_step
,
CvSize
size
,
int
swap_rb
=
0
);
void
icvCvt_BGRA2Gray_16u_CnC1R
(
const
ushort
*
bgra
,
int
bgra_step
,
ushort
*
gray
,
int
gray_step
,
CvSize
size
,
int
ncn
,
int
swap_rb
=
0
);
void
icvCvt_Gray2BGR_8u_C1C3R
(
const
uchar
*
gray
,
int
gray_step
,
uchar
*
bgr
,
int
bgr_step
,
CvSize
size
);
void
icvCvt_Gray2BGR_16u_C1C3R
(
const
ushort
*
gray
,
int
gray_step
,
ushort
*
bgr
,
int
bgr_step
,
CvSize
size
);
void
icvCvt_BGRA2BGR_8u_C4C3R
(
const
uchar
*
bgra
,
int
bgra_step
,
uchar
*
bgr
,
int
bgr_step
,
CvSize
size
,
int
swap_rb
=
0
);
void
icvCvt_BGRA2BGR_16u_C4C3R
(
const
ushort
*
bgra
,
int
bgra_step
,
ushort
*
bgr
,
int
bgr_step
,
CvSize
size
,
int
_swap_rb
);
void
icvCvt_BGR2RGB_8u_C3R
(
const
uchar
*
bgr
,
int
bgr_step
,
uchar
*
rgb
,
int
rgb_step
,
CvSize
size
);
#define icvCvt_RGB2BGR_8u_C3R icvCvt_BGR2RGB_8u_C3R
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录