仅对从扭曲图像获得的坐标应用重映射,而不对整个图像应用重映射
Apply remap only on coordinates obtained from distorted image and not on whole image
opencv 中的 initUndistortRectifyMap 函数在 x 和 y 方向上产生 maap,其中包含未失真像素的坐标,它根据固有的相机矩阵、失真矩阵和旋转矩阵计算这些映射。
initUndistortRectifyMap(cam1,dst1,R1,P1, imageSize, CV_16SC2, map1x,map1y);
CAM1(固有相机矩阵)DST1(失真系数)R1(旋转矩阵)map1x(图像大小的新地图,用于表示移动的x坐标在未失真图像中的位置)map2x ((图像大小的新地图,用于表示移位的 y 坐标在未失真的图像中的位置)因此,如果新的图像坐标在扭曲的图像中(x扭曲,ydistort)未失真可以使用以下公式计算
x_undistort = map1x.at<short>(ydistort,xdistort);
y_undistort = map2x.at<short>(ydistort,xdistort);
我检查了未失真图像中的相应点,它们不会导致相同的点。我在 (0,0) 处检查了 map1x 的值,它包含负值,当我单击控制台查找坐标值时,它会给出来自 (0:im_width,0:imheight) 的相应结果。是否有任何规范化程序?如何在不处理整个图像的情况下直接计算点。
像素的坐标是整数。因此,将它们作为浮点数是没有意义的。
如果需要Point2f
,可以简单地从检索到的Point
构造一个Point2f
:
double minVal; double maxVal; Point minLoc; Point maxLoc;
minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );
Point2f minLocF(minLoc);
Point2f maxLocF(maxLoc);
如果您需要具有该签名的函数,则可以在包装器函数中应用它,或更改 OpenCV 源代码并重新编译(不推荐)。
相关文章:
- 如何使用 OpenCV 解码在两个 UWP 应用之间发送的图像字节?
- OpenCV - 如何在灰度图像上应用 Kmeans?
- 有关图像处理应用程序的硬件和软件安全性的建议
- 在 OpenCV 中应用公式并传输图像
- Qt-png图像未显示在部署应用程序中
- 如何在使用OpenCV C++应用K均值后提取分割图像
- 使用命名管道将图像从C++发送到 C# 应用程序
- 将高斯模糊应用于灰度图像
- 二项式模糊图像过滤器将内核应用于图像
- 如何将子窗口(MFC 应用程序)的工作区保存到图像
- 如何防止从浏览器查看图像,但允许在桌面应用程序上
- 如何在 Unity Android 应用程序中的 OpenCV 中使用 ARCore 相机图像
- 应用傅里叶逆变换OpenCV后构建图像
- 在Visual C 控制台应用程序中显示图像
- 将功能应用于图像的每个像素
- 如何在窗口 MFC 应用程序中更改图像
- 将多个图像从QT应用程序拖到MS Word
- 打开不同的图像文件,并使用GDI 库在主应用程序窗口的背景上绘制它们
- iOS + C++ 中的图像处理在 iphone 应用程序中
- 如何在应用颜色校正之前使输入图像线性化