首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只对扭曲图像获得的坐标进行重新映射,而不是对整个图像进行重新映射

只对扭曲图像获得的坐标进行重新映射,而不是对整个图像进行重新映射
EN

Stack Overflow用户
提问于 2016-02-29 01:41:58
回答 1查看 883关注 0票数 0

opencv中的initUndistortRectifyMap函数在x方向和y方向上都会产生多幅图像,其中包含了不失真像素的坐标,它基于本征摄像机矩阵、畸变矩阵和旋转矩阵来计算这些映射。

代码语言:javascript
复制
initUndistortRectifyMap(cam1,dst1,R1,P1, imageSize, CV_16SC2, map1x,map1y);

cam1 (内禀摄像机矩阵) dst1 (失真系数) R1 (旋转矩阵) map1x (新的图像大小映射,以表示移位的x坐标在未失真图像中的位置) map2x (新的图像大小映射,以表示移位的y坐标位于未失真图像中),因此,如果在畸变图像(x失真,y失真)中新的图像坐标,则可以使用

代码语言:javascript
复制
x_undistort = map1x.at<short>(ydistort,xdistort);
y_undistort = map2x.at<short>(ydistort,xdistort);

我检查了相应的点在不失真的图像,他们没有结果在同一点。我在(0,0)处检查了map1x的值,它包含负值,当我单击控制台查找坐标值时,它给出了(0:im_width,0:imheight)的相应结果。有正常化程序吗?如何在不处理整个图像的情况下直接计算点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-29 01:54:32

像素的坐标是整数。所以把它们作为浮点数是没有意义的。

如果您需要Point2f,可以简单地从检索到的Point构造一个Point

代码语言:javascript
复制
double minVal; double maxVal; Point minLoc; Point maxLoc;
minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );

Point2f minLocF(minLoc);
Point2f maxLocF(maxLoc);

如果您需要一个带有该签名的函数,则可以将其应用于包装器函数中,或者更改OpenCV源代码并重新编译(不推荐)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35690659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档