在 Engee 中处理图像¶
让我们介绍一种设计图像处理算法的方法,将图像加载到 Engee 画布上的组件中,并处理不同的颜色通道。
示例目的¶
图形设计环境可以实现极高的开发速度。虽然全面的图形开发需要一个庞大的组件库,而设计者必须能够理解这些组件,但这种方法可以避免编码错误,并在总体上使专业程序员和其他应用科学领域的专家机会均等。
任务描述¶
在本示例中,我们将演示如何将图像载入画布组件并反转其中一个通道。输入图像文件的名称应作为Изображение
块的参数Название файла
提供。假设图像有 4 个通道。
如果输入图像中没有 Alpha 通道(透明度通道),模型将在输出端 A 输出一个由 255 个值组成的矩阵。
图像大小警告¶
在处理大图像时,在代码块内存储图像的方法效率不高。如果在块代码中以文本形式存储矩阵,可能会出现这种情况。
我们建议在小尺寸图像(单边小于 200 像素)上调试算法。为了很好地处理大尺寸图像,很可能需要将图像以char*
格式放在组件代码中,并借助额外的 C/C++ 库进行 "解包"。
初始图像为 300 x 300,模型编译时间为 62 秒,初始化时间为 49 秒,执行时间为 0.36 秒(总计 110 秒)。
使用 200 x 200 的源图像,模型编译 18 秒,初始化 25 秒,运行 0.32 秒(总计 43 秒)。
包括模型编译和初始化在内,处理 100*100 图像的时间不到 10 秒。
模型描述¶
更改遮罩参数时,图块正面的图像也会更新。图像也放在图块代码内,即使移动模型或移动或删除原始图像文件,图像也不会被删除。
让我们通过程序控制机制来运行模型:
model_name = "picture_read_model";
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");
res = engee.run( model_name );
通过访问函数库RGBA
查看转换后的图像Images.jl
pic = RGBA.( collect(res["out_R"])[end,end]./255,
collect(res["out_G"])[end,end]./255,
collect(res["out_B"])[end,end]./255,
collect(res["out_A"])[end,end]./255 )
将获得的图像保存到文件中。
save( "out.png", pic )
不出所料,我们反转了红色通道的值,删除了透明通道并输出了图像。
结论¶
Engee 可以相对轻松地构建机器视觉算法原型,同时保持图形编程所提供的操作层次和逻辑清晰度。