halcon和opencv的图像互转(CC++)

halcon和opencv的图像互转(CC++),第1张

简介:opencv开源的计算机视觉库,halcon是商业的视觉库,opencv的一些算子在一般的生产环境下是够用的,但是在对算法速度、精度都要求更高的环境下就有些吃力了。最近在研究halcon,抽几个算子粗略测试一下,效果和速度确实很好,以后可能会在对算法速度要求比较高的地方部署,这里先记录一下opencv和halcon图像数据互转的方法。

参考:

图像边缘处理提取,这个能实现的软件可多的去了。NI VISION、VBAI、视觉助手,这NI的三款软件都能搞定;HALCON也能搞定;Vision Pro也能搞定;OPENCV也能搞定。最基本的函数,是一款图像处理软件,都能搞定这个。

最近看到一个例子,来自一个论坛,提问者想要计算图中木头的数量,悬赏了分值但是没人回复,我看到的时候这帖子已经过去好几年了。作为一个肤浅的初学者,我觉得这问题很有趣,所以打算从这个例子入手,研究下Halcon中的图像处理。

首先,从二值化开始,这张图在刚开始二值化之后出现一些问题。阈值设的高了,会弱化边角一些木头的局部区域,设的低了,会造成一些粘连。而且图像中还有一些干扰。如何在保留边角局部信息的情况下尽可能的防止粘连,是个问题。

结合这个问题,我的思路是分两步走。先把边角一些小的木头区域提取出来,再专门解决粘连的问题,问题得到了解决。

区分大小的依据主要是面积,在做了一些基本的预处理之后,可以把较小的一部分区域图像,如靠近四个边的部分木头,先分割出来了。这个过程中,需要对木头边缘做一些处理,去掉外圈的树皮,和一些干扰的区域,提取出木头截面的大块部分。

得到下图:

这一步就比较简单了,没有小面积区域的顾虑,可以做下腐蚀,让边缘更加清晰。这样就分割开来了。

把上一部分割出的大小区域分别合并,即得到木头的总数了。

btw:这个例子我也做过分水岭算法的测试,但是效果不尽如人意,主要是分割出来的区域太多了,比如图中那片白色的干扰物、右小方的竹棍等,也分割出来了。而边角一些木头的边缘区域又很难顾及到。也可能是参数设置的不够好,所以这个算法我还在研究。

以上是我自己的一些浅薄的思路,希望随着学习的深入,能发现更好的方式。

step1:准备数据

在图像选择区域作为训练集,可以是矩形,也可以是任意形状的区域。

step2:创建一个MLP

step3:添加训练数据

step4:查看训练样本数量(非必须)

step5:训练

step6:映射颜色表

step7:使用

step8:看效果

参考:classify_image_class_luthdev,texture_laws_mlphdev,segment_citrus_fruitshdev

参考:create_class_mlp (Operator)

1、将MLP模型写入文件

write_class_mlp( : : MLPHandle, FileName : )

2、从文件中读入一个MLP模型

read_class_mlp( : : FileName : MLPHandle)

3、清除MLP

clear_class_mlp( : : MLPHandle : )

以上就是关于halcon和opencv的图像互转(C/C++)全部的内容,包括:halcon和opencv的图像互转(C/C++)、图像边缘处理提取算法与实现用到哪些软件、Halcon粘连图象分割与计数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10092351.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存