Python 查找相框的画布边界

Python 查找相框的画布边界,python,python-imaging-library,Python,Python Imaging Library,假设我们有一个像上面一样的相框。 从中心开始,你如何找到一个可以用来绘制的最大面积的矩形(矩形中的所有像素必须是rgb(255255) 我需要找到图中A点和B点的x和y坐标 我的方法之一是这样做: 从中心开始,像上图一样展开边界。 但是我不确定你怎么能写出这样的循环。你应该使用泛洪填充算法:。 我建议您使用集合将要更改的像素存储在一个集合中;这样可以减少要执行的递归次数 编辑:我显然没有很好地阅读这个问题。但是,如果你在一个展开的圆上使用泛洪填充,它仍然可以使用 从一个像素开始,它是圆的中心

假设我们有一个像上面一样的相框。 从中心开始,你如何找到一个可以用来绘制的最大面积的矩形(矩形中的所有像素必须是rgb(255255)

我需要找到图中A点和B点的x和y坐标

我的方法之一是这样做: 从中心开始,像上图一样展开边界。
但是我不确定你怎么能写出这样的循环。

你应该使用泛洪填充算法:。 我建议您使用集合将要更改的像素存储在一个集合中;这样可以减少要执行的递归次数

编辑:我显然没有很好地阅读这个问题。但是,如果你在一个展开的圆上使用泛洪填充,它仍然可以使用

  • 从一个像素开始,它是圆的中心
  • 将半径放大1个单位
  • 找到圆内的像素,使用泛光填充获得它们的颜色
  • 如果它们是相同的颜色,转到2。如果不是,你有半径找到矩形是下一个
  • 此算法可能会为您提供一个可能的解决方案,但可能会有多个,具体取决于您的框架-您应该开始使用一些简单的框架进行开发,在这些框架中可以轻松判断解决方案的正确性


    编辑:根据评论,问题在于找到多边形中面积最大的平行轴矩形-幸运的是,有一篇关于这方面的论文:。但看起来并不容易。

    我会在这里使用蛮力。选择
    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)中实现时间。我想我误解了你在这里描述的算法。这不是给了你最大的平方吗?我不太确定,因为我不能从数学上证明它。