Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
4ebdf493
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,发现更多精彩内容 >>
提交
4ebdf493
编写于
11月 11, 2016
作者:
V
Vadim Pisarevsky
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #7634 from paroj:undistpt
上级
4f8c3d7d
3609343a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
30 addition
and
34 deletion
+30
-34
modules/imgproc/src/undistort.cpp
modules/imgproc/src/undistort.cpp
+30
-34
未找到文件。
modules/imgproc/src/undistort.cpp
浏览文件 @
4ebdf493
...
...
@@ -280,16 +280,9 @@ void cvUndistortPoints( const CvMat* _src, CvMat* _dst, const CvMat* _cameraMatr
const
CvMat
*
_distCoeffs
,
const
CvMat
*
matR
,
const
CvMat
*
matP
)
{
double
A
[
3
][
3
],
RR
[
3
][
3
],
k
[
14
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
}
,
fx
,
fy
,
ifx
,
ify
,
cx
,
cy
;
double
A
[
3
][
3
],
RR
[
3
][
3
],
k
[
14
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
CvMat
matA
=
cvMat
(
3
,
3
,
CV_64F
,
A
),
_Dk
;
CvMat
_RR
=
cvMat
(
3
,
3
,
CV_64F
,
RR
);
const
CvPoint2D32f
*
srcf
;
const
CvPoint2D64f
*
srcd
;
CvPoint2D32f
*
dstf
;
CvPoint2D64f
*
dstd
;
int
stype
,
dtype
;
int
sstep
,
dstep
;
int
i
,
j
,
n
,
iters
=
1
;
cv
::
Matx33d
invMatTilt
=
cv
::
Matx33d
::
eye
();
CV_Assert
(
CV_IS_MAT
(
_src
)
&&
CV_IS_MAT
(
_dst
)
&&
...
...
@@ -304,6 +297,8 @@ void cvUndistortPoints( const CvMat* _src, CvMat* _dst, const CvMat* _cameraMatr
cvConvert
(
_cameraMatrix
,
&
matA
);
int
iters
=
0
;
if
(
_distCoeffs
)
{
CV_Assert
(
CV_IS_MAT
(
_distCoeffs
)
&&
...
...
@@ -340,27 +335,26 @@ void cvUndistortPoints( const CvMat* _src, CvMat* _dst, const CvMat* _cameraMatr
cvMatMul
(
&
_PP
,
&
_RR
,
&
_RR
);
}
srcf
=
(
const
CvPoint2D32f
*
)
_src
->
data
.
ptr
;
srcd
=
(
const
CvPoint2D64f
*
)
_src
->
data
.
ptr
;
dstf
=
(
CvPoint2D32f
*
)
_dst
->
data
.
ptr
;
dstd
=
(
CvPoint2D64f
*
)
_dst
->
data
.
ptr
;
stype
=
CV_MAT_TYPE
(
_src
->
type
);
dtype
=
CV_MAT_TYPE
(
_dst
->
type
);
sstep
=
_src
->
rows
==
1
?
1
:
_src
->
step
/
CV_ELEM_SIZE
(
stype
);
dstep
=
_dst
->
rows
==
1
?
1
:
_dst
->
step
/
CV_ELEM_SIZE
(
dtype
);
n
=
_src
->
rows
+
_src
->
cols
-
1
;
fx
=
A
[
0
][
0
];
fy
=
A
[
1
][
1
];
ifx
=
1.
/
fx
;
ify
=
1.
/
fy
;
cx
=
A
[
0
][
2
];
cy
=
A
[
1
][
2
];
for
(
i
=
0
;
i
<
n
;
i
++
)
const
CvPoint2D32f
*
srcf
=
(
const
CvPoint2D32f
*
)
_src
->
data
.
ptr
;
const
CvPoint2D64f
*
srcd
=
(
const
CvPoint2D64f
*
)
_src
->
data
.
ptr
;
CvPoint2D32f
*
dstf
=
(
CvPoint2D32f
*
)
_dst
->
data
.
ptr
;
CvPoint2D64f
*
dstd
=
(
CvPoint2D64f
*
)
_dst
->
data
.
ptr
;
int
stype
=
CV_MAT_TYPE
(
_src
->
type
);
int
dtype
=
CV_MAT_TYPE
(
_dst
->
type
);
int
sstep
=
_src
->
rows
==
1
?
1
:
_src
->
step
/
CV_ELEM_SIZE
(
stype
);
int
dstep
=
_dst
->
rows
==
1
?
1
:
_dst
->
step
/
CV_ELEM_SIZE
(
dtype
);
double
fx
=
A
[
0
][
0
];
double
fy
=
A
[
1
][
1
];
double
ifx
=
1.
/
fx
;
double
ify
=
1.
/
fy
;
double
cx
=
A
[
0
][
2
];
double
cy
=
A
[
1
][
2
];
int
n
=
_src
->
rows
+
_src
->
cols
-
1
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
double
x
,
y
,
x0
,
y
0
;
double
x
,
y
,
x0
=
0
,
y0
=
0
;
if
(
stype
==
CV_32FC2
)
{
x
=
srcf
[
i
*
sstep
].
x
;
...
...
@@ -375,14 +369,16 @@ void cvUndistortPoints( const CvMat* _src, CvMat* _dst, const CvMat* _cameraMatr
x
=
(
x
-
cx
)
*
ifx
;
y
=
(
y
-
cy
)
*
ify
;
// compensate tilt distortion
cv
::
Vec3d
vecUntilt
=
invMatTilt
*
cv
::
Vec3d
(
x
,
y
,
1
);
double
invProj
=
vecUntilt
(
2
)
?
1.
/
vecUntilt
(
2
)
:
1
;
x0
=
x
=
invProj
*
vecUntilt
(
0
);
y0
=
y
=
invProj
*
vecUntilt
(
1
);
if
(
iters
)
{
// compensate tilt distortion
cv
::
Vec3d
vecUntilt
=
invMatTilt
*
cv
::
Vec3d
(
x
,
y
,
1
);
double
invProj
=
vecUntilt
(
2
)
?
1.
/
vecUntilt
(
2
)
:
1
;
x0
=
x
=
invProj
*
vecUntilt
(
0
);
y0
=
y
=
invProj
*
vecUntilt
(
1
);
}
// compensate distortion iteratively
for
(
j
=
0
;
j
<
iters
;
j
++
)
for
(
int
j
=
0
;
j
<
iters
;
j
++
)
{
double
r2
=
x
*
x
+
y
*
y
;
double
icdist
=
(
1
+
((
k
[
7
]
*
r2
+
k
[
6
])
*
r2
+
k
[
5
])
*
r2
)
/
(
1
+
((
k
[
4
]
*
r2
+
k
[
1
])
*
r2
+
k
[
0
])
*
r2
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录