使用OpenCV将任意轮廓形状转换为矩形

8
简短的问题是如何使用OpenCV将下面这种形状转换为矩形?
注意事项:
1. 形状轮廓不一定是直线,可能略微弯曲。 2. 形状内部的内容必须沿x和y轴进行相应的拉伸。
长篇故事:
我试图在代表具有文本、标志等的纸张的图像上修正扭曲,使其几乎完全成为矩形。输入图像已经处于黑白格式,并进行了透视校正。因此,除了在扭曲的边缘周围有黑色区域和文本稍微波动之外,一切都很好。
我的想法是,序列应该是这样的:
1. 找到纸张轮廓 2. 计算一个校正矩阵,将形状区域映射到正确的矩形区域 3. 使用计算出的矩阵转换图像
即类似于我们使用Imgproc.findContours执行透视校正的方式,然后找到纸张的角落,接着使用Imgproc.getPerspectiveTransform,最后使用Imgproc.warpPerspective来执行校正。
但是我找不到这种情况的合适算法。请问有人能指导如何在图像处理中实现这一点吗?

你可能想要查看这个链接:http://stackoverflow.com/questions/32207085/shape-transformers-and-interfaces-opencv3-0 - tfv
1个回答

0
在这种情况下,您要对该图像进行非线性转换。传统上,您会使用整个纸张的单个变换将其变成矩形。这可以仅使用角落完成。更复杂的校正,例如镜头畸变,您需要选择页面上的点,并断言它们应该共面以生成您的变换矩阵。基本上,您需要了解图像中的几何形状才能消除畸变。因此,您需要找到页面的三维表面的几何形状。
为了找到您损坏的纸张的高度非线性几何形状,您可以拍摄多张页面图像并进行三角测量。如果您想走这条路,请购买Hartley和Zisserman的《多视角几何》一书。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接