扩展应用

YXDragon YXDragon 发帖 –
选项
这里我们介绍一些扩展应用,即对ImagePy做一定程度上的功能扩充。

查看目录树

ImagePy是一个插件系统,所有的功能都是以插件方式进行组织的,我们可以通过几个工具来查看组织结构。这些功能在 Plugins > Manager 下,点击插件,右边的窗口可以展示插件具体信息,双击可以直接执行,右侧sourcecode蓝色按钮,点击可以查看源代码,而在列表视图中,输入可以查找需要的功能。



添加快捷键

对ImagePy做功能改变,最简单的一种改变就是为已有功能设置快捷键,快捷键按设置功能在 Plugins > Manager > Shotcut Manager 中,设置方法很简单,找到你需要的功能,然后按下你希望的快捷键就好了。



录制宏

宏是按照顺序执行的一个命令序列,每条命令记录了使用的插件,以及插件运行的参数。这样的命令序列存储成一个mc为后缀的文件,就是宏。我们可以打开ImagePy > Plugins > Macros > Recorder 进行宏录制。



宏里面如果有参数,执行期间将不会弹出对话框,直接使用宏里面指定的参数,而如果参数写None,则表示在宏运行期间仍会弹出对话框,交互确定参数。把宏文件拷贝到imagepy的menus任意子菜单下,重启时,会自动被映射成一个菜单项(其实在ImagePy中宏也是一类插件)。

那么有时候我们不仅希望放到菜单里,常用功能如果能放在工具栏中就更好了,下面我们就来实现,并且也很简单。我们要做的是把mc文件拷贝到tools文件夹,并且配一个同名的16 x 16 的gif图标,重启,我们观察HS被加载到了工具栏。



如果我们想给某个已有功能添加到工具栏,那么就要做一个单条命令的宏,参数给None,然后准备一个图标,拷贝到tools的子文件夹下。

添加插件

通过上面的一些内容,我们应该可以体会到插件系统的本质,那么增加功能,最直接的方式就是增加插件。其实我们要做的很简单,就是找到合适的插件,把插件拷贝到menus或 tools文件夹下。我们以 https://github.com/Image-Py/opencv-plgs 项目为例,安装OpenCV插件。



对于ImageJ,已经建立了一个很强的生态系统,第三方插件的数量非常多,而ImagePy暂时还没有太多的插件,刚才的OpenCV插件其实只是我们写的演示项目,但是ImagePy背靠诸多强大的开源库,因而插件开发的门槛比ImageJ低很多,效率高很多,相信以后会渐渐形成自己的生态系统。

编写插件

以上介绍的方法都可以一定程度上增加ImagePy的功能,而这里介绍的编写插件给我们最大的自由来自己编写一个定制功能。与之前的方法都不同的是你需要编程,也就是懂得python。这里介绍一个最简单的例子,更多内容会在开发者专区中讨论。

# -*- coding: utf-8 -*
from skimage import feature
from core.engines import Filter
class Plugin(Filter):
    title = 'Canny'
    note = ['all', 'auto_msk', 'auto_snap', 'preview']
   
    para = {'sigma':1.0, 'low_threshold':10, 'high_threshold':20}
   
    #parameter
    view = [(float, (0,10), 1,  'sigma', 'sigma', 'pix'),
            ('slide',(0,30), 'low_threshold', 'low_threshold',''),
            ('slide',(0,30), 'high_threshold', 'high_threshold','')]
    #process
    def run(self, ips, snap, img, para = None):
        return feature.canny(snap, sigma=para['sigma'], low_threshold=para[
            'low_threshold'], high_threshold=para['high_threshold'], mask=ips.get_msk())*255




简单介绍:
1.集成Filter
2.Title = ‘Canny’
3.Note:配置行为,例如支持那些类型,是否支持撤销,是否支持选区等。
4.Para:插件需要的参数
5.View:指定每个参数的交互方式
6.Run:调用方法,处理图像

短短12行代码就完成了边缘插件,是不是很令人兴奋?