halcon 截取边框为单一颜色图片的非边框有效区域,并截取成图片

用halcon 获取一副图像里的某个自己需要的区域,并截取成画面。halcon里实现该功能的办法不止一种,但是我尝试过后觉得最有效的是这种:利用单一颜色的边框截取该单一颜色包围的区域,提取该区域region,然后在图片里截取该region对应的画面。以下是效果

  1. 有红色边框的原图(我这里是矩形图,但是只要是单一颜色边框就可以提取非规则图片)
    在这里插入图片描述
  2. 用halcon对单一红色通道进行滤波,然后提取区域后的效果
    在这里插入图片描述

该算法很简单,而且效果很好,算法解释(想要自己调试每一个过程的话,把上面的原图保存下来,做为下面halcon的输入图片参数就可以自己一步一步调试了):
在这里插入图片描述

* 读取要截感兴趣区域的原图
read_image (Image, 'gasket/red')
* 把彩色图片解析成红绿蓝三个不同通道的灰度图
decompose3(Image,re,gr,bu)
* 用灰度值接近红色单色通道的灰度值 = 237左右 去滤波红色通道灰度图
threshold(re,regions,237,237)
* 连接区域连通区域,这里是消除中间一些稀少干扰噪点
connection(regions, OutputRegion) 
* 再次在抠出来的灰度图里选 灰度值 = 237 的区域
select_shape(OutputRegion,regionn,'area','and',237,9999)
* 得到整个轮廓的区域
get_domain(Image,domain)
* 用整个轮廓的区域减去图片边框红色区域 ,就是图片里面自己需要截的图片内容
difference(domain,regionn,outputregion)
* 用自己抠出来的区域去在图片上截区域对应的图片
reduce_domain(Image,outputregion,OutputRegion1)
* 把红色边框抠掉后,把得到的图片内容截图保存到D盘,图片名称:tempImage.png
write_image(OutputRegion1,'png',0,'d:\\tempImagee')

在这里插入图片描述

halcon算法的每一个函数我都已经做了很简单的解释,具体每一个算子对应的动作和效果图也可以一一对应调试:

* 把彩色图片解析成红绿蓝三个不同通道的灰度图
decompose3(Image,re,gr,bu)

上面算子把原图彩色图Image解析成三种颜色(红,绿,蓝)单一对应的通道,三幅灰度图re(red) gr(green) bl(blue):
在这里插入图片描述

* 用灰度值接近红色单色通道的灰度值 = 237左右 去滤波红色通道灰度图
threshold(re,regions,237,237)

因为单一红色通道灰度图,单一红色边框对应灰度值是237,所以直接把灰度值最小和最大的范围设成237,这样滤波的效果就最好了,刚好把红色边框找到
在这里插入图片描述

* 连接区域连通区域,这里是消除中间一些稀少干扰噪点
connection(regions, OutputRegion) 

上面通过滤波获取红色边框的最终效果,完全可以看得出来,区域里面也有一些干扰小点区域产生了,所以这里用connection算法,把里面的噪声去掉
在这里插入图片描述

* 得到整个轮廓的区域
get_domain(Image,domain)
* 用整个轮廓的区域减去图片边框红色区域 ,就是图片里面自己需要截的图片内容
difference(domain,regionn,outputregion)

最让我兴奋的是,halcon里的Regions区域可以做并集,交集,补集运算。所以先获取整个图片的整个区域,然后减去刚刚截取得到的红色边框区域,就成为里面有效的图片了(如想在大图里扣一部分,那就用大图里自己想要扣的区域的单一颜色边框去扣,没有边框就自己加一个单一颜色边框,什么形状的区域都能截取)
在这里插入图片描述
虽然看着好像没区别,但是后面的outputregion其实已经是从整体图片里抠掉红色边框区域后的区域哦

* 用自己抠出来的区域去在图片上截区域对应的图片
reduce_domain(Image,outputregion,OutputRegion1)
* 把红色边框抠掉后,把得到的图片内容截图保存到D盘,图片名称:tempImage.png
write_image(OutputRegion1,'png',0,'d:\\tempImagee')

这里最后就只是用去outputregion这个区域在整个图片里截取对应区域的画面,然后保存图片格式为png(这里可以修改成halcon支持的图片格式,jpg,jpeg等等),最后保存在D盘根目录下面,图片名称为tempImagee.png(自己已经保存上面的原图,想单步调试的,最后算法跑完,在D盘根目录下就可以找到最后截取到的效果图。

(最后,其实我是个啰里啰嗦的人,应该根本不用这么详细就可以让自己和别人,每一次回头看都能理解。)

halcon 截取自己想要的区域的方法,不止一种(1、如果自己需要扣的局部图片是纯色,就直接用该纯色的灰度值去滤波,然后提取区域,然后用区域去截取对应图片 2、如果自己想要一个局部图片的最大矩形区域,或最小外围矩形区域,就用XLD或edge_color颜色边界或ege_image图片边界或Region滤波边界,用这些通过滤波或提取,得到需要矩形的边界,然后提取(inner_rectangle1,outter_rectangle1)),目前我还只知道这两种。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值