找到相框的画布边界

时间:2015-10-15 05:06:41

标签: python python-imaging-library

Photo frame 假设我们有一个像上面那样的相框。 从中心开始,你怎么能找到一个可以用来绘制最大面积的矩形(矩形中的所有像素都必须是rgb(255,255,255)?

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

proposed algorithm

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

2 个答案:

答案 0 :(得分:2)

您应该使用填充算法:link。 我建议你使用集合来存储要在一组中改变的像素;这样可以减少要完成的递归次数。

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

  1. 从单个像素开始,即您圈子的中心。
  2. 将半径范围设置为1个单位。
  3. 查找圆圈内的像素,使用填充颜色获取颜色。
  4. 如果它们是相同的颜色,请转到2.如果没有,则找到下一个矩形的半径。
  5. 这个算法可能会给你一个可能的解决方案,但可能有多个,取决于你的框架 - 你应该开始使用一些简单的框架开发,可以很容易地判断解决方案的正确性。

    编辑:根据评论,问题是在多边形中找到最大面积的轴平行矩形 - 幸运的是,有一篇论文:here。虽然看起来不是一件容易的事。

答案 1 :(得分:0)

我会在这里使用蛮力。选择y_bottomy_top,确定相应的x_leftx_right,并在图片的宽度上循环y_bottomy_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