gpt4 book ai didi

python - 洪水填充二值图像中的形状

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:27 26 4
gpt4 key购买 nike

我有一个二值图像(见下文),我想将中心大点内的所有点标记为 1(白色)。如果我理解正确的话,最好的方法是使用洪水填充算法;有没有你建议使用的Python模块?如果没有,您将如何构建脚本?

谢谢!

The image I am working with

最佳答案

这是一种非常幼稚的洪水填充方法(使用问题中详细介绍的 0 和 1,但不读取图像,而是使用硬编码数据),避免了 python 中缺乏 TCO 的问题。也许它可以给你一些想法:

#! /usr/bin/python3

d = '''111110001111101
110000011100000
111000010111001
111100100111111
111100000111111
111110111111111'''

def flood(grid, x, y):
toBeFilled = {(x, y)}
while toBeFilled:
tbf = set()
for x, y in toBeFilled:
try:
if grid[y][x]: continue #Pixel is already 1 -> no action
except IndexError: continue #Index is out of bounds
grid[y][x] = 1 #set Pixel to white
for xoff, yoff in ((1, -1), (1, 0), (1, 1), (0, -1), (0, 1), (-1, -1), (-1, 0), (-1, 1)):
tbf |= {(x + xoff, y + yoff)} #add adjacent pixels
toBeFilled = tbf

def pprint(grid):
print('-' * 20)
for line in grid: print(''.join(str(i) for i in line))
print('-' * 20)

d = [[int(c) for c in line] for line in d.split('\n')]
pprint(d)
flood(d, 4, 1)
pprint(d)

输出是:

--------------------
111110001111101
110000011100000
111000010111001
111100100111111
111100000111111
111110111111111
--------------------
--------------------
111111111111101
111111111100000
111111111111001
111111111111111
111111111111111
111111111111111
--------------------

关于python - 洪水填充二值图像中的形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21287622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com