从图像批量生成高度图

Batch generate height map from images

我有很多 .png 文件,我正在寻找一种方法来为每个文件生成高度贴图(或法线贴图)。我可以从 gimp 法线贴图插件获得我想要的结果,但我需要一种方法来自动化该过程或替代工具。我对重现它们的底层算法知之甚少,而且对一般的 cg 知之甚少。是否有库或工具可以执行此操作?只要 api/interface 足够高级,我对语言并不挑剔,尽管开源更好,因为我目前无法访问花哨的软件。谢谢!

您可以为此编写 GIMP 本身的脚本。 我不知道你在调用哪个插件 'normalmap' - 或者你所说的 'height map' 是什么意思(我知道的高度图只是图像的灰度版本) - 但即使它是第三个派对插件,应该可以通过脚本界面运行。

只需转至 plug-ins-> Python-FU->console - 您将进入 Python 提示符。单击 "browse" 按钮 - 然后找到您要调用的插件。如果您单击 "apply" - 浏览器将粘贴模板以供插件调用到 Python 提示符。

因此,在此之前,您可能需要测试调用:打开示例图像,转到 Python 提示符,然后通过键入以下内容获取对图像的引用: image = gimp.image_list()[0],然后输入图像 drawable = image.layers[0] 获取对图像第一层的引用。

这些应该是您的插件调用需要预先创建的所有数据。执行上述操作,在提示中粘贴对所需插件的调用。请注意,上面的名称 imagedrawable 只是变量名称 - 您可以选择自己的名称 - 但这些名称通常在您从 [=] 中选择 "apply" 时预先填写36=] 过程调用按钮。

一旦你做到这里,你可以利用 Python 打开一个文件夹中的所有图像,应用插件,然后将它们保存回来 - 你可以直接在控制台,或稍后,创建一个将显示在菜单中的插件。

import os
for filename in os.listdir('mydir'):
    if not filename.endswith('.png'): continue
    name = 'mydir/' + filename
    image = pdb.gimp_file_load(name, name)
    pdb.plug_in_bump_map(......)  # use your plug-in here
    outputname = 'mydir/' + name.split('.')[0] + '_normal.png'
    pdb.gimp_file_save(image, image.layers[0], outputname, outputname)
    pdb.gimp_image_delete(image)  # just frees the image from memory.

只需按两次,整个文件夹的顺序将为 运行。 (请注意,如果您想要 运行 "bump-map" 插件,有几个参数必须从变量名替换为您想要的实际值)。

如果那是你想要的,而且你会经常使用它,请将它保存为 .py 文件,并将该代码放入适当的函数中以将其转换为插件 - 在我的回答中有一个填充示例:

GIMP: Create image stack from all image files in folder