Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
340e23a4
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,发现更多精彩内容 >>
提交
340e23a4
编写于
9月 28, 2011
作者:
A
Andrey Kamaev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixed TBB-related bug in YUV420 to RGB conversion
上级
fcaa587b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
23 addition
and
16 deletion
+23
-16
modules/imgproc/src/color.cpp
modules/imgproc/src/color.cpp
+23
-16
未找到文件。
modules/imgproc/src/color.cpp
浏览文件 @
340e23a4
...
...
@@ -91,6 +91,7 @@
#include "precomp.hpp"
#include <limits>
#include <iostream>
namespace
cv
{
...
...
@@ -2657,18 +2658,21 @@ struct YUV4202BGR888Invoker
const
uchar
*
my1
,
*
muv
;
int
width
;
YUV4202BGR888Invoker
(
Mat
&
_dst
,
int
_width
,
const
uchar
*
_y1
,
const
uchar
*
_uv
)
:
dst
(
&
_dst
),
my1
(
_y1
),
muv
(
_uv
),
width
(
_width
)
{}
YUV4202BGR888Invoker
(
Mat
*
_dst
,
int
_width
,
const
uchar
*
_y1
,
const
uchar
*
_uv
)
:
dst
(
_dst
),
my1
(
_y1
),
muv
(
_uv
),
width
(
_width
)
{}
void
operator
()(
const
BlockedRange
&
range
)
const
{
int
rangeBegin
=
range
.
begin
()
*
2
;
int
rangeEnd
=
range
.
end
()
*
2
;
//B = 1.164(Y - 16) + 2.018(U - 128)
//G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
//R = 1.164(Y - 16) + 1.596(V - 128)
const
uchar
*
y1
=
my1
+
range
.
begin
()
*
width
,
*
uv
=
muv
+
range
.
begin
()
*
width
/
2
;
const
uchar
*
y1
=
my1
+
range
Begin
*
width
,
*
uv
=
muv
+
rangeBegin
*
width
/
2
;
for
(
int
j
=
range
.
begin
();
j
<
range
.
end
()
;
j
+=
2
,
y1
+=
width
*
2
,
uv
+=
width
)
for
(
int
j
=
range
Begin
;
j
<
rangeEnd
;
j
+=
2
,
y1
+=
width
*
2
,
uv
+=
width
)
{
uchar
*
row1
=
dst
->
ptr
<
uchar
>
(
j
);
uchar
*
row2
=
dst
->
ptr
<
uchar
>
(
j
+
1
);
...
...
@@ -2714,18 +2718,21 @@ struct YUV4202BGRA8888Invoker
const
uchar
*
my1
,
*
muv
;
int
width
;
YUV4202BGRA8888Invoker
(
Mat
&
_dst
,
int
_width
,
const
uchar
*
_y1
,
const
uchar
*
_uv
)
:
dst
(
&
_dst
),
my1
(
_y1
),
muv
(
_uv
),
width
(
_width
)
{}
YUV4202BGRA8888Invoker
(
Mat
*
_dst
,
int
_width
,
const
uchar
*
_y1
,
const
uchar
*
_uv
)
:
dst
(
_dst
),
my1
(
_y1
),
muv
(
_uv
),
width
(
_width
)
{}
void
operator
()(
const
BlockedRange
&
range
)
const
{
int
rangeBegin
=
range
.
begin
()
*
2
;
int
rangeEnd
=
range
.
end
()
*
2
;
//B = 1.164(Y - 16) + 2.018(U - 128)
//G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
//R = 1.164(Y - 16) + 1.596(V - 128)
const
uchar
*
y1
=
my1
+
range
.
begin
()
*
width
,
*
uv
=
muv
+
range
.
begin
()
*
width
/
2
;
const
uchar
*
y1
=
my1
+
range
Begin
*
width
,
*
uv
=
muv
+
rangeBegin
*
width
/
2
;
for
(
int
j
=
range
.
begin
();
j
<
range
.
end
()
;
j
+=
2
,
y1
+=
width
*
2
,
uv
+=
width
)
for
(
int
j
=
range
Begin
;
j
<
rangeEnd
;
j
+=
2
,
y1
+=
width
*
2
,
uv
+=
width
)
{
uchar
*
row1
=
dst
->
ptr
<
uchar
>
(
j
);
uchar
*
row2
=
dst
->
ptr
<
uchar
>
(
j
+
1
);
...
...
@@ -3133,30 +3140,30 @@ void cv::cvtColor( InputArray _src, OutputArray _dst, int code, int dcn )
if
(
CV_YUV420sp2RGB
==
code
||
CV_YUV420sp2RGBA
==
code
)
{
if
(
dcn
==
3
)
parallel_for
(
BlockedRange
(
0
,
dstSz
.
height
,
2
),
YUV4202BGR888Invoker
<
2
,
0
>
(
dst
,
dstSz
.
width
,
y
,
uv
));
parallel_for
(
BlockedRange
(
0
,
dstSz
.
height
/
2
),
YUV4202BGR888Invoker
<
2
,
0
>
(
&
dst
,
dstSz
.
width
,
y
,
uv
));
else
parallel_for
(
BlockedRange
(
0
,
dstSz
.
height
,
2
),
YUV4202BGRA8888Invoker
<
2
,
0
>
(
dst
,
dstSz
.
width
,
y
,
uv
));
parallel_for
(
BlockedRange
(
0
,
dstSz
.
height
/
2
),
YUV4202BGRA8888Invoker
<
2
,
0
>
(
&
dst
,
dstSz
.
width
,
y
,
uv
));
}
else
if
(
CV_YUV420sp2BGR
==
code
||
CV_YUV420sp2BGRA
==
code
)
{
if
(
dcn
==
3
)
parallel_for
(
BlockedRange
(
0
,
dstSz
.
height
,
2
),
YUV4202BGR888Invoker
<
0
,
0
>
(
dst
,
dstSz
.
width
,
y
,
uv
));
parallel_for
(
BlockedRange
(
0
,
dstSz
.
height
/
2
),
YUV4202BGR888Invoker
<
0
,
0
>
(
&
dst
,
dstSz
.
width
,
y
,
uv
));
else
parallel_for
(
BlockedRange
(
0
,
dstSz
.
height
,
2
),
YUV4202BGRA8888Invoker
<
0
,
0
>
(
dst
,
dstSz
.
width
,
y
,
uv
));
parallel_for
(
BlockedRange
(
0
,
dstSz
.
height
/
2
),
YUV4202BGRA8888Invoker
<
0
,
0
>
(
&
dst
,
dstSz
.
width
,
y
,
uv
));
}
else
if
(
CV_YUV420i2RGB
==
code
||
CV_YUV420i2RGBA
==
code
)
{
if
(
dcn
==
3
)
parallel_for
(
BlockedRange
(
0
,
dstSz
.
height
,
2
),
YUV4202BGR888Invoker
<
2
,
1
>
(
dst
,
dstSz
.
width
,
y
,
uv
));
parallel_for
(
BlockedRange
(
0
,
dstSz
.
height
/
2
),
YUV4202BGR888Invoker
<
2
,
1
>
(
&
dst
,
dstSz
.
width
,
y
,
uv
));
else
parallel_for
(
BlockedRange
(
0
,
dstSz
.
height
,
2
),
YUV4202BGRA8888Invoker
<
2
,
1
>
(
dst
,
dstSz
.
width
,
y
,
uv
));
parallel_for
(
BlockedRange
(
0
,
dstSz
.
height
/
2
),
YUV4202BGRA8888Invoker
<
2
,
1
>
(
&
dst
,
dstSz
.
width
,
y
,
uv
));
}
else
if
(
CV_YUV420i2BGR
==
code
||
CV_YUV420i2BGRA
==
code
)
{
if
(
dcn
==
3
)
parallel_for
(
BlockedRange
(
0
,
dstSz
.
height
,
2
),
YUV4202BGR888Invoker
<
0
,
1
>
(
dst
,
dstSz
.
width
,
y
,
uv
));
parallel_for
(
BlockedRange
(
0
,
dstSz
.
height
/
2
),
YUV4202BGR888Invoker
<
0
,
1
>
(
&
dst
,
dstSz
.
width
,
y
,
uv
));
else
parallel_for
(
BlockedRange
(
0
,
dstSz
.
height
,
2
),
YUV4202BGRA8888Invoker
<
0
,
1
>
(
dst
,
dstSz
.
width
,
y
,
uv
));
parallel_for
(
BlockedRange
(
0
,
dstSz
.
height
/
2
),
YUV4202BGRA8888Invoker
<
0
,
1
>
(
&
dst
,
dstSz
.
width
,
y
,
uv
));
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录