Python 查找相框的画布边界
假设我们有一个像上面一样的相框。 从中心开始,你如何找到一个可以用来绘制的最大面积的矩形(矩形中的所有像素必须是rgb(255255) 我需要找到图中A点和B点的x和y坐标 我的方法之一是这样做: 从中心开始,像上图一样展开边界。Python 查找相框的画布边界,python,python-imaging-library,Python,Python Imaging Library,假设我们有一个像上面一样的相框。 从中心开始,你如何找到一个可以用来绘制的最大面积的矩形(矩形中的所有像素必须是rgb(255255) 我需要找到图中A点和B点的x和y坐标 我的方法之一是这样做: 从中心开始,像上图一样展开边界。 但是我不确定你怎么能写出这样的循环。你应该使用泛洪填充算法:。 我建议您使用集合将要更改的像素存储在一个集合中;这样可以减少要执行的递归次数 编辑:我显然没有很好地阅读这个问题。但是,如果你在一个展开的圆上使用泛洪填充,它仍然可以使用 从一个像素开始,它是圆的中心
但是我不确定你怎么能写出这样的循环。你应该使用泛洪填充算法:。 我建议您使用集合将要更改的像素存储在一个集合中;这样可以减少要执行的递归次数 编辑:我显然没有很好地阅读这个问题。但是,如果你在一个展开的圆上使用泛洪填充,它仍然可以使用
编辑:根据评论,问题在于找到多边形中面积最大的平行轴矩形-幸运的是,有一篇关于这方面的论文:。但看起来并不容易。我会在这里使用蛮力。选择
y_底部
和y顶部
,确定相应的x_左侧
和x_右侧
>并在图片的宽度上循环y_-bottom
和y_-top
。在伪代码中:
for y_bottom in range (0, H):
for y_top in range (y_bottom, H):
# Assume that x = W/2 is part of the rectangle
x_left = maximum X such that all pixels in box (x_left, y_top, W/2, y_bottom) are white
x_right = minimum X such that all pixels in box (W/2, y_top, x_right, y_bottom) are white
determine Area of box (x_left, y_top, x_right, y_bottom)
store this box if Area is larger than max found so far
在这样一个复杂的框架中,我认为有必要找到所有可能的解决方案,并比较所有解决方案的面积,以找到最佳解决方案。我认为我误解了您在这里描述的算法。这不是给了您最大的圆吗?当然,它给了一个圆。但它的中心和直径为您提供了一个相当好的近似值,可以确定物体的位置矩形的对角线与长度的交点。这不是一个能够给出最佳解的算法,但可能是一个很好的近似值,这取决于框架的形状等。我认为有太多的可能性,这不是一个很好的近似值。例如,你假设矩形是一个squ是,这对大多数图像肯定无效。O(n^2)似乎太多了。因为会有这么多像素。我同意O(n^2)这会很昂贵,但我还没有在这页上看到一个可行的替代方案,我怀疑它是否存在。了解矩形的底部不会给你任何关于矩形顶部的信息,所以它们是自变量。如果你想加快速度,你可以要求照片的中心也是百分位矩形的r。然后,通过从y_底部获得y_top和图像尺寸,可以将其重写为O(n)算法。最终,我采用了我的方法,并确定面积不必是最大面积。因此可以在O(n)中实现时间。我想我误解了你在这里描述的算法。这不是给了你最大的平方吗?我不太确定,因为我不能从数学上证明它。