找到 canvas 个相框的边界

finding canvas boundary of a photo frame

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

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

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

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

编辑:我显然没有很好地阅读问题。尽管如此,如果您在展开的圆圈上使用泛洪填充,还是可以使用的。

  1. 从一个像素开始,也就是圆的中心。
  2. 将半径扩大 1 个单位。
  3. 找到你的圆圈内的像素,使用颜色填充获得它们的颜色。
  4. 如果颜色相同,则转到 2。如果不是,则根据半径找到下一个矩形。

这个算法可能会给你一个可能的解决方案,但可能有不止一个,这取决于你的框架 - 你应该开始使用一些简单的框架来开发,这样可以很容易地判断解决方案的正确性。

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

我会在这里使用蛮力。选择一个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