Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
ace71cef
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,发现更多精彩内容 >>
提交
ace71cef
编写于
11月 21, 2013
作者:
A
Anatoly Baksheev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added Affine3<T>::rvec()
上级
9f1f5aed
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
52 addition
and
0 deletion
+52
-0
modules/core/include/opencv2/core/affine.hpp
modules/core/include/opencv2/core/affine.hpp
+52
-0
未找到文件。
modules/core/include/opencv2/core/affine.hpp
浏览文件 @
ace71cef
...
...
@@ -97,6 +97,9 @@ namespace cv
Mat3
linear
()
const
;
Vec3
translation
()
const
;
//Rodrigues vector
Vec3
rvec
()
const
;
Affine3
inv
(
int
method
=
cv
::
DECOMP_SVD
)
const
;
// a.rotate(R) is equivalent to Affine(R, 0) * a;
...
...
@@ -300,6 +303,55 @@ typename cv::Affine3<T>::Vec3 cv::Affine3<T>::translation() const
return
Vec3
(
matrix
.
val
[
3
],
matrix
.
val
[
7
],
matrix
.
val
[
11
]);
}
template
<
typename
T
>
inline
typename
cv
::
Affine3
<
T
>::
Vec3
cv
::
Affine3
<
T
>::
rvec
()
const
{
cv
::
Vec3d
w
;
cv
::
Matx33d
u
,
vt
,
R
=
rotation
();
cv
::
SVD
::
compute
(
R
,
w
,
u
,
vt
,
cv
::
SVD
::
FULL_UV
+
cv
::
SVD
::
MODIFY_A
);
R
=
u
*
vt
;
double
rx
=
R
.
val
[
7
]
-
R
.
val
[
5
];
double
ry
=
R
.
val
[
2
]
-
R
.
val
[
6
];
double
rz
=
R
.
val
[
3
]
-
R
.
val
[
1
];
double
s
=
std
::
sqrt
((
rx
*
rx
+
ry
*
ry
+
rz
*
rz
)
*
0.25
);
double
c
=
(
R
.
val
[
0
]
+
R
.
val
[
4
]
+
R
.
val
[
8
]
-
1
)
*
0.5
;
c
=
c
>
1.0
?
1.0
:
c
<
-
1.0
?
-
1.0
:
c
;
double
theta
=
acos
(
c
);
if
(
s
<
1e-5
)
{
if
(
c
>
0
)
rx
=
ry
=
rz
=
0
;
else
{
double
t
;
t
=
(
R
.
val
[
0
]
+
1
)
*
0.5
;
rx
=
std
::
sqrt
(
std
::
max
(
t
,
0.0
));
t
=
(
R
.
val
[
4
]
+
1
)
*
0.5
;
ry
=
std
::
sqrt
(
std
::
max
(
t
,
0.0
))
*
(
R
.
val
[
1
]
<
0
?
-
1.0
:
1.0
);
t
=
(
R
.
val
[
8
]
+
1
)
*
0.5
;
rz
=
std
::
sqrt
(
std
::
max
(
t
,
0.0
))
*
(
R
.
val
[
2
]
<
0
?
-
1.0
:
1.0
);
if
(
fabs
(
rx
)
<
fabs
(
ry
)
&&
fabs
(
rx
)
<
fabs
(
rz
)
&&
(
R
.
val
[
5
]
>
0
)
!=
(
ry
*
rz
>
0
)
)
rz
=
-
rz
;
theta
/=
std
::
sqrt
(
rx
*
rx
+
ry
*
ry
+
rz
*
rz
);
rx
*=
theta
;
ry
*=
theta
;
rz
*=
theta
;
}
}
else
{
double
vth
=
1
/
(
2
*
s
);
vth
*=
theta
;
rx
*=
vth
;
ry
*=
vth
;
rz
*=
vth
;
}
return
cv
::
Vec3d
(
rx
,
ry
,
rz
);
}
template
<
typename
T
>
inline
cv
::
Affine3
<
T
>
cv
::
Affine3
<
T
>::
inv
(
int
method
)
const
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录