0

上位机图像处理和嵌入式模块部署(qmacvisual自定义插件代码分析)

 1 month ago
source link: https://blog.csdn.net/feixiaoxing/article/details/137032163
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        qmacvisual里面的第三方插件主要由两部分组成,一部分是ExtensionLibrary,也就是插件的容器,这个是官方提供的,不需要修改代码;另外一个ExtLibraryCase,这个是用户自己编写的插件。后面一种,作者也提供了对应的模板代码。大家如果需要开发自己的插件,只需要copy一下这个工程,在对应的frmExtLibraryCase.cpp添加对应的代码内容就可以了。

1、创建工程和创建流程

        首先,还是创建工程、创建流程,这是基础。

2、插件实现的功能

        这个插件实现的功能主要就是在图像里面找圆。它的方法蛮好玩的。前面都是常规操作,即图像灰化-》中值滤波-》canny算子-》dilate膨胀-》轮廓提取。这些都是基本操作,大部分图像也是会这么处理的。最重要的是下面的逻辑,这才是设计的部分。

        接下来,针对于每个轮廓,先统计轮廓的面积area,接着获取轮廓的周长len,然后依次计算半径r和场数c。这里默认假设轮廓是圆,

        通过对半径r和圆度c进行范围筛选,我们就可以找到合适的轮廓选项了。

3、代码如何编写

        对于qmacvisual里面的插件,它的输入是图像,它的输出也是图像。如果这个时候还要输出其他的数据,有一个办法,就是提前设置好全局变量,把数据赋值给这个全局变量就可以。

        ExtLibraryCase插件的代码和其他52个插件的代码非常类似,不过大概是作者不想客户自己编写的代码影响整个架构的质量,所以做了这么一个插件容器的设计。一个容器一次只能放一个插件。如果有多个自定义插件需要运行,那么就要在流程中配置多个容器。

        回到ExtLibraryCase插件,最重要的文件来自于frmExtLibraryCase.cpp。如果不需要做界面功能的补充,修改这一个cpp源文件就够了。功能的入口来自于Execute函数,

        在Execute函数当中会调用RunToolPro这个函数,

        如果客户的项目比较着急,完全可以copy这个工程,修改RunToolPro函数代码,编译生成新的插件即可。因为图像的算法比较多,客户的场景有的时候也比较特殊,定制算法是常有的事情,这种情况下,快速去开发定制的算法也不失为一个明智的选择。

4、插件的运行效果

        为了让大家知道插件时如何运行的,我们创建了一个简单的流程,即读取图像、运行扩展库、图像显示,

2d12e1766bdd4c1382d93ba523aa00e8.png

        其中扩展库是这么配置的,

3250ee52be414814a33faaa67676b5e0.png

        最后的运行效果是这样的,图像中所有的圆都被找出来了,也就是图中红色的部分,本身就是一个一个的小圆。

e03ef59c62dd461fbf2bd78ebb411407.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK