gpt4 book ai didi

java - OpenCV 将具有任意轮廓的形状转换为矩形

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:15:36 26 4
gpt4 key购买 nike

简短的问题是如何使用 OpenCV 将如下图所示的形状转换为矩形?

enter image description here

注意事项:

  1. 形状轮廓不一定是直线 - 它们可以是略微弯曲。
  2. 形状内的内容必须沿 x 和 y 轴相应。

说来话长:
在纸张折叠 2 或 4 次并使其几乎完全呈矩形后,我试图纠正代表一张带有文本、 Logo 等的纸张的图像的扭曲。

输入图像已经是黑白格式,并具有校正后的透视图。所以一切都很好,除了它在扭曲的边缘周围有黑色区域并且文本有点波浪形。

我的想法是顺序应该是这样的:

  1. 找到纸张轮廓
  2. 计算校正矩阵以将形状区域映射到适当的矩形区域
  3. 使用计算矩阵转换图像

即类似于我们使用 Imgproc.findContours 执行透视校正,然后找到图纸角,然后是 Imgproc.getPerspectiveTransform 并最终使用 Imgproc.warpPerspective 执行校正。

但我找不到适合这种情况的算法。

有人能指出如何在图像处理中实现它吗?

最佳答案

在这种情况下,您希望对该图像进行非线性变换。传统上,您会使用整张纸的单一变换将其变成矩形。这可以只用角落来完成。更复杂的校正,如镜头失真,您需要在页面上选择点并断言它们应该共面以生成变换矩阵。基本上,您需要了解图像中的几何形状才能消除失真。所以你需要找到的几何图形是页面的 3 维表面。

为了找到损坏纸张的高度非线性几何结构,您可以拍摄页面的多张图像并对它们进行三角测量。如果您想走这条路,请阅读 Hartley 和 Zisserman 的多 View 几何。

关于java - OpenCV 将具有任意轮廓的形状转换为矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31008791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com