Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
dad986a6
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,发现更多精彩内容 >>
提交
dad986a6
编写于
4月 25, 2011
作者:
V
Vladislav Vinogradov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
added 16-bit support to TiffEncoder (restore after #4919)
上级
3b9138c4
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
53 addition
and
9 deletion
+53
-9
modules/highgui/src/grfmt_tiff.cpp
modules/highgui/src/grfmt_tiff.cpp
+28
-9
modules/highgui/src/grfmt_tiff.hpp
modules/highgui/src/grfmt_tiff.hpp
+2
-0
modules/highgui/src/utils.cpp
modules/highgui/src/utils.cpp
+19
-0
modules/highgui/src/utils.hpp
modules/highgui/src/utils.hpp
+4
-0
未找到文件。
modules/highgui/src/grfmt_tiff.cpp
浏览文件 @
dad986a6
...
...
@@ -306,6 +306,11 @@ ImageEncoder TiffEncoder::newEncoder() const
return
new
TiffEncoder
;
}
bool
TiffEncoder
::
isFormatSupported
(
int
depth
)
const
{
return
depth
==
CV_8U
||
depth
==
CV_16U
;
}
void
TiffEncoder
::
writeTag
(
WLByteStream
&
strm
,
TiffTag
tag
,
TiffFieldType
fieldType
,
int
count
,
int
value
)
...
...
@@ -321,7 +326,14 @@ bool TiffEncoder::write( const Mat& img, const vector<int>& )
{
int
channels
=
img
.
channels
();
int
width
=
img
.
cols
,
height
=
img
.
rows
;
int
fileStep
=
width
*
channels
;
int
depth
=
img
.
depth
();
if
(
depth
!=
CV_8U
&&
depth
!=
CV_16U
)
return
false
;
int
bytesPerChannel
=
depth
==
CV_8U
?
1
:
2
;
int
fileStep
=
width
*
channels
*
bytesPerChannel
;
WLByteStream
strm
;
if
(
m_buf
)
...
...
@@ -356,7 +368,7 @@ bool TiffEncoder::write( const Mat& img, const vector<int>& )
uchar
*
buffer
=
_buffer
;
int
stripOffsetsOffset
=
0
;
int
stripCountsOffset
=
0
;
int
bitsPerSample
=
8
;
// TODO support 16 bit
int
bitsPerSample
=
8
*
bytesPerChannel
;
int
y
=
0
;
strm
.
putBytes
(
fmtSignTiffII
,
4
);
...
...
@@ -376,9 +388,15 @@ bool TiffEncoder::write( const Mat& img, const vector<int>& )
for
(
;
y
<
limit
;
y
++
)
{
if
(
channels
==
3
)
icvCvt_BGR2RGB_8u_C3R
(
img
.
data
+
img
.
step
*
y
,
0
,
buffer
,
0
,
cvSize
(
width
,
1
)
);
if
(
depth
==
CV_8U
)
icvCvt_BGR2RGB_8u_C3R
(
img
.
data
+
img
.
step
*
y
,
0
,
buffer
,
0
,
cvSize
(
width
,
1
)
);
else
icvCvt_BGR2RGB_16u_C3R
(
(
const
ushort
*
)(
img
.
data
+
img
.
step
*
y
),
0
,
(
ushort
*
)
buffer
,
0
,
cvSize
(
width
,
1
)
);
else
if
(
channels
==
4
)
icvCvt_BGRA2RGBA_8u_C4R
(
img
.
data
+
img
.
step
*
y
,
0
,
buffer
,
0
,
cvSize
(
width
,
1
)
);
if
(
depth
==
CV_8U
)
icvCvt_BGRA2RGBA_8u_C4R
(
img
.
data
+
img
.
step
*
y
,
0
,
buffer
,
0
,
cvSize
(
width
,
1
)
);
else
icvCvt_BGRA2RGBA_16u_C4R
(
(
const
ushort
*
)(
img
.
data
+
img
.
step
*
y
),
0
,
(
ushort
*
)
buffer
,
0
,
cvSize
(
width
,
1
)
);
strm
.
putBytes
(
channels
>
1
?
buffer
:
img
.
data
+
img
.
step
*
y
,
fileStep
);
}
...
...
@@ -416,12 +434,13 @@ bool TiffEncoder::write( const Mat& img, const vector<int>& )
if
(
channels
>
1
)
{
bitsPerSample
=
strm
.
getPos
();
strm
.
putWord
(
8
);
strm
.
putWord
(
8
);
strm
.
putWord
(
8
);
int
bitsPerSamplePos
=
strm
.
getPos
();
strm
.
putWord
(
bitsPerSample
);
strm
.
putWord
(
bitsPerSample
);
strm
.
putWord
(
bitsPerSample
);
if
(
channels
==
4
)
strm
.
putWord
(
8
);
strm
.
putWord
(
bitsPerSample
);
bitsPerSample
=
bitsPerSamplePos
;
}
directoryOffset
=
strm
.
getPos
();
...
...
modules/highgui/src/grfmt_tiff.hpp
浏览文件 @
dad986a6
...
...
@@ -118,6 +118,8 @@ public:
TiffEncoder
();
virtual
~
TiffEncoder
();
bool
isFormatSupported
(
int
depth
)
const
;
bool
write
(
const
Mat
&
img
,
const
vector
<
int
>&
params
);
ImageEncoder
newEncoder
()
const
;
...
...
modules/highgui/src/utils.cpp
浏览文件 @
dad986a6
...
...
@@ -192,6 +192,25 @@ void icvCvt_BGRA2RGBA_8u_C4R( const uchar* bgra, int bgra_step,
}
}
void
icvCvt_BGRA2RGBA_16u_C4R
(
const
ushort
*
bgra
,
int
bgra_step
,
ushort
*
rgba
,
int
rgba_step
,
CvSize
size
)
{
int
i
;
for
(
;
size
.
height
--
;
)
{
for
(
i
=
0
;
i
<
size
.
width
;
i
++
,
bgra
+=
4
,
rgba
+=
4
)
{
ushort
t0
=
bgra
[
0
],
t1
=
bgra
[
1
];
ushort
t2
=
bgra
[
2
],
t3
=
bgra
[
3
];
rgba
[
0
]
=
t2
;
rgba
[
1
]
=
t1
;
rgba
[
2
]
=
t0
;
rgba
[
3
]
=
t3
;
}
bgra
+=
bgra_step
/
sizeof
(
bgra
[
0
])
-
size
.
width
*
4
;
rgba
+=
rgba_step
/
sizeof
(
rgba
[
0
])
-
size
.
width
*
4
;
}
}
void
icvCvt_BGR2RGB_8u_C3R
(
const
uchar
*
bgr
,
int
bgr_step
,
uchar
*
rgb
,
int
rgb_step
,
CvSize
size
)
...
...
modules/highgui/src/utils.hpp
浏览文件 @
dad986a6
...
...
@@ -88,6 +88,10 @@ void icvCvt_BGRA2RGBA_8u_C4R( const uchar* bgra, int bgra_step,
uchar
*
rgba
,
int
rgba_step
,
CvSize
size
);
#define icvCvt_RGBA2BGRA_8u_C4R icvCvt_BGRA2RGBA_8u_C4R
void
icvCvt_BGRA2RGBA_16u_C4R
(
const
ushort
*
bgra
,
int
bgra_step
,
ushort
*
rgba
,
int
rgba_step
,
CvSize
size
);
#define icvCvt_RGBA2BGRA_16u_C4R icvCvt_BGRA2RGBA_16u_C4R
void
icvCvt_BGR5552Gray_8u_C2C1R
(
const
uchar
*
bgr555
,
int
bgr555_step
,
uchar
*
gray
,
int
gray_step
,
CvSize
size
);
void
icvCvt_BGR5652Gray_8u_C2C1R
(
const
uchar
*
bgr565
,
int
bgr565_step
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录