基于节点编辑的openCV

本文介绍了如何利用Litegraph.js构建一个基于节点的OpenCV编辑器,以直观的方式开发和调整图像处理算法。通过创建自定义节点,实现了包括颜色处理、图像变换、图像算子等功能,并讨论了EEL作为Python与JavaScript接口的使用,以及在实现过程中遇到的挑战和解决方案。
摘要由CSDN通过智能技术生成

引子:

opencv学习梯度不算很平坦,其中一个很重要的原因就是cv复杂度,cv中函数其特定的使用场景,对不同函数使用的参数不同,结果会差距很大。cv虽然提供了快速gui接口,也可以用cvui直接渲染控件到界面上,简单的任务基本应付。但对一些复杂算法,除了需要大量的方法、参数微调之外,还需要有记录和分析对比等一系列数据报告。前一段时间在学习Blender的节点系统,参数调节所见即所得非常直观,工作效率大为提升。试用一段时间后感觉可以在opencv中搞点动作,用最直观的方法来开发opencv功能。

选型

但在节点系统选型上,纠结了很久,imgui-node-editor是第一选择,因为它依赖少,跨平台性很好,渲染上显示上没有太大的缺陷,但是没有节点计算逻辑涉及,就是说自己去实现节点计算逻辑,缺乏较好的应用案例,这也是我最终放弃imgui-node-editor的一个主要原因。

Litegraph.js 是基于javascript的,互交以canvas为基础的,原生节点拿来可就用。以此为基础,可以实现大部分界面互交。虽然关于litegraph.js开发的资料比较少,但是litegraph.js本体就是一个很好的学习案例,可以参考如shader节点、MIDI处理等模块,webglstudio.js-master也非常值得参考。另外litegraph.js也是支持节点计算和节点拓展功能。自定义节点写起来比较清晰,我后面会花一点时间来介绍。

js和python接口:EEL是一个可选项,在python程序中标注下接口,即可以通过js来访问该接口以此来执行python函数,同样道理,也可以在Web中标注函数接口,让python来调用该接口进行页面更新。EEL可以作为一个服务器后台程序运行也可以一个Chrome独立程序直接运行。

图像接口:基础对象如数值、字符串等都可以方便的传输,图像稍微麻烦点,传输需要用到base64格式作为中间格式往来于各个节点之间,python接口在收到base64格式的参数后,转换成为np的array格式后即可进行后续处理,计算结束后再以base64格式返回js。

举个简单例子:

常规方法

比如需要对图像做一个消除孤立点的工作,所需的python代码如下,代码需要对图像做几步操作,打开原始图像,一次dilate,一次Canny,一次connectedComponentsWithStats,最后根据阈值进行孤立点涂色或标注等等,最后输出图像,代码如下

import cv2
import numpy as np
filename="image/test.jpg"
img = cv2.imread(filename,0)
kernel = np.ones((3,3),np.uint8)
dilate = cv2.dilate(img,kernel,iterations = 1)
canny1=cv2.Canny(dilate,100,200)
_, labels, stats, centroids = cv2.connectedComponents
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值