我创建了一个 python 程序,它只是从图像中删除绿色背景。
现在我想实现定义为入口点的函数remove_green_background()
。我搜索了很多网站以及 stackoverflow,但无法理解入口点是如何工作的。
所以任何人都可以使用这段代码向我详细解释这些入口点放在哪里?
from PIL import Image
import sys
import os
def rgb_to_hsv(r, g, b):
maxc = max(r, g, b)
minc = min(r, g, b)
v = maxc
if minc == maxc:
return 0.0, 0.0, v
s = (maxc-minc) / maxc
rc = (maxc-r) / (maxc-minc)
gc = (maxc-g) / (maxc-minc)
bc = (maxc-b) / (maxc-minc)
if r == maxc:
h = bc-gc
elif g == maxc:
h = 2.0+rc-bc
else:
h = 4.0+gc-rc
h = (h/6.0) % 1.0
return h, s, v
GREEN_RANGE_MIN_HSV = (100, 80, 70)
GREEN_RANGE_MAX_HSV = (185, 255, 255)
def remove_green_background():
# Load image and convert it to RGBA, so it contains alpha channel
name, ext = os.path.splitext(Filepath)
im = Image.open(Filepath)
im = im.convert('RGBA')
# Go through all pixels and turn each 'green' pixel to transparent
pix = im.load()
width, height = im.size
for x in range(width):
for y in range(height):
r, g, b, a = pix[x, y]
h_ratio, s_ratio, v_ratio = rgb_to_hsv(r / 255.0, g / 255.0, b / 255.0)
h, s, v = (h_ratio * 360, s_ratio * 255, v_ratio * 255)
min_h, min_s, min_v = GREEN_RANGE_MIN_HSV
max_h, max_s, max_v = GREEN_RANGE_MAX_HSV
if min_h <= h <= max_h and min_s <= s <= max_s and min_v <= v <= max_v:
pix[x, y] = (0, 0, 0, 0)
im.save(name + '.png')
if __name__ == '__main__':
remove_green_background()
最佳答案
您可能知道,Python 是一种脚本语言,因此程序的执行将从源文件的最顶部开始,一直持续到最后。
因此,如果您执行文件 mycode.py
使用命令 python mycode.py
执行将从源文件的最顶部开始 mycode.py
但是,这种方法在大型应用程序中会带来一些问题。通常,您运行的第一个命令是导入,它基本上获取其他一些 Python 文件,并执行 in 中的代码。因此,作为一个实际示例,假设您有 2 个文件 first.py
和second.py
。 first.py
开始如下:
import second
和second
开始如下:
def a_function():
# do something
然后Python看到导入命令,运行second.py
,并初始化函数a_function()
这样它现在就可以在 first.py
内使用
但是second.py
还可能包含在解释器在文件上运行时立即执行的代码,如下所示:
def a_function():
# do something
print("I am called upon execution")
现在我们遇到一个问题:当first.py
时,打印语句将被执行。进口second.py
.
为了解决这个问题,特别是在将来导入的文件中使用了以下措施:
def a_function():
# do something
if __name__ == "__main__":
print("I am executed")
这不像 C 入口点 ( int main(){...}
)。事实上,C 编译器会寻找一个入口点来在代码中的给定点开始执行。
Pyhton 解释安装只是对预定义的全局( __name__
)执行检查。如果变量等于 "__main__"
,这是一个非常笼统的解释,它表示该文件正在执行,否则表示该文件正在导入(因此检查失败,代码不执行)。
因此,在您的情况下,只需定义您的函数( def remove_green_background():
),并在源文件中首先调用它(基本上,第一个命令没有缩进)
关于python - 如何定义一个函数作为包入口点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54161143/