PIL:如何在给定一组无序轮廓尺寸的情况下绘制形状
PIL: How to draw shapes given a set of unordered outline dimensions
我正在使用 Python 版本 3.8.7 和 PIL 库。
我有一个包含蓝图各种元素维度的 DataFrame。两个主要元素是线条(构成轮廓)和标签(彩色矩形)。我使用 PIL 绘制了下图。
但是,我想将每个房间的颜色填写为与其内的相应标签相同的颜色。现在我只有形成轮廓的线的尺寸(坐标)和标签的尺寸。各维度值(坐标)如下:
(x_min, y_min, x_max, y_max)
每个标签的适当颜色是预定义的。
这些列表都是无序的,我想知道如何为每个标记的房间用正确的颜色填充轮廓内的区域。一些有趣的注意事项是,有些线虽然看起来是一条连贯的直线,但实际上是由多条线组成的。
如果需要,绘制矩形的代码为:
#Dimensions/coordinates # Color # Outline Color
draw.rectangle((200, 100, 300, 200), fill=(0, 192, 192), outline=(255, 255, 255))
我不确定如何完成这个任务。
如果这是预期的结果:
你可以使用这个伪代码:
for thisColour in list of blob colours (1)
generate list of neighbours 1-pixel outside this blob (2)
for thisNeighbour in list of neighbours
if thisNeighbour is currently white
floodfill with thisColour from thisNeighbour as seed (3)
- 您应该有一个彩色斑点列表。
- 这是简单的数学运算,因为您的彩色斑点都是矩形,您只需将斑点左上角的 x,y 值减去 1,然后将底部的 x,y 值加 1-右上角。因此,如果您的 blob 位于 8,10 到 100,110 之间,那么邻居就是矩形 7,9 到 99,109 边上的点。
scikit-image
有一个 rectangle_perimter() 也可以为您执行此操作。如果你的斑点是任何复杂的形状,你可以使用形态学开口来获得它们。
- 为此使用 floodfill()。
顺便说一句,在使用 JPEG 格式进行图像处理之前请三思,因为它有损并且会扭曲颜色,您最终不得不添加 “软糖因素” 和各处的公差允许它引入的“错误”。通常最好使用无损的 PNG 格式,尤其是对于像您这样的计算机生成的块状图形。
我正在使用 Python 版本 3.8.7 和 PIL 库。
我有一个包含蓝图各种元素维度的 DataFrame。两个主要元素是线条(构成轮廓)和标签(彩色矩形)。我使用 PIL 绘制了下图。
但是,我想将每个房间的颜色填写为与其内的相应标签相同的颜色。现在我只有形成轮廓的线的尺寸(坐标)和标签的尺寸。各维度值(坐标)如下:
(x_min, y_min, x_max, y_max)
每个标签的适当颜色是预定义的。
这些列表都是无序的,我想知道如何为每个标记的房间用正确的颜色填充轮廓内的区域。一些有趣的注意事项是,有些线虽然看起来是一条连贯的直线,但实际上是由多条线组成的。
如果需要,绘制矩形的代码为:
#Dimensions/coordinates # Color # Outline Color
draw.rectangle((200, 100, 300, 200), fill=(0, 192, 192), outline=(255, 255, 255))
我不确定如何完成这个任务。
如果这是预期的结果:
你可以使用这个伪代码:
for thisColour in list of blob colours (1)
generate list of neighbours 1-pixel outside this blob (2)
for thisNeighbour in list of neighbours
if thisNeighbour is currently white
floodfill with thisColour from thisNeighbour as seed (3)
- 您应该有一个彩色斑点列表。
- 这是简单的数学运算,因为您的彩色斑点都是矩形,您只需将斑点左上角的 x,y 值减去 1,然后将底部的 x,y 值加 1-右上角。因此,如果您的 blob 位于 8,10 到 100,110 之间,那么邻居就是矩形 7,9 到 99,109 边上的点。
scikit-image
有一个 rectangle_perimter() 也可以为您执行此操作。如果你的斑点是任何复杂的形状,你可以使用形态学开口来获得它们。 - 为此使用 floodfill()。
顺便说一句,在使用 JPEG 格式进行图像处理之前请三思,因为它有损并且会扭曲颜色,您最终不得不添加 “软糖因素” 和各处的公差允许它引入的“错误”。通常最好使用无损的 PNG 格式,尤其是对于像您这样的计算机生成的块状图形。