【问题标题】:Image remapping from floating-point pixel coordinates in opencv从opencv中的浮点像素坐标重新映射图像
【发布时间】:2012-08-17 14:46:33
【问题描述】:

我有一个带有浮点像素坐标的矩阵和该浮点像素坐标中相应的灰度值矩阵。我需要将图像从浮点像素坐标重新映射到常规网格。 opencv 中的 cv::remap 函数可以像这样转换源图像: dst(x,y) = src(mapx(x,y), mapy(x,y)) 就我而言,我有这样的事情: dst(mapx(x,y), mapy(x,y)) = src(x,y) 根据上面的等式,我需要确定目标图像 (dst(x,y))。 在 OpenCv 中是否有一种简单的方法来执行这种重新映射,或者你能推荐任何其他开源图像处理库来解决这个问题吗?

【问题讨论】:

  • 你能定义反向关系吗?给定 dst 图像中的整数像素位置,你能指定它在源图像中的浮点位置吗?
  • 很遗憾我不能这样做。

标签: image image-processing opencv


【解决方案1】:
  • 拍摄照片的四个角。
  • 在 dst 图像中提取它们的对应对象。将它们存储在两个点向量中:std::vector<cv::Point> dstPts, srcPts
  • cv::findHomography(dstPts, srcPtrs,...)提取它们之间的几何关系
  • 应用 cv::warpPerspective()。在内部,它计算并应用正确的重新映射

如果您的地图中定义的变换是单应变换,它就可以工作。如果是一些漩涡、鱼眼效果、镜头校正图等就不行了。

【讨论】:

  • 浮点坐标是任意的。不幸的是,地图之间的转换不是单应的。
  • 其实你可以选择src点周围最近的4个点,做上面提到的过程。
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2022-01-02
相关资源
最近更新 更多