我正在使用OpenCV将一堆视点匹配到一幅全景图中。结果是在一堆黑色背景(某种多边形)上的图像。我想要做的是裁剪此多边形,以便在生成的图像中没有黑色。有一个好的算法可以做到这一点吗?
我想的幼稚方法是从图像中间的一个小正方形开始,然后向上扩展直到我变黑,然后向左和向右扩展。
我想要的解决方案是使填充区域的总面积最大化的解决方案。
编辑:多边形是凹面的,所以我们需要检查-我认为尝试尝试每个顶点对的O(N^2)
算法是可行的,因为N很小。但是我们需要检查区域边界是否已填充,我想可以通过检查每个顶点以查看其是否位于我们选择的顶点对定义的矩形的边界内,来在O(N)中完成。这给了我们一个O(N^3)
算法
最佳答案
天真的解决方案可能无法很好地工作,因为通常使矩形更高会限制其宽度,因此您将无法获得最佳的解决方案。
如果多边形上的顶点没有太多,则可以使用以下方法:尝试拾取上边缘和下边缘的每种组合。为简化起见,假设它们将始终包含多边形的顶点之一。指定顶部和底部时,可以确定侧面,因此对于每对顶部/底部,您都可以计算面积。选择面积最大的解决方案。
上面的简化可能会产生次优的结果,但是应该不会太差。
关于image - 找到适合图像上绘制的多边形的最大正方形的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4273022/