转战Halcon日记【6】-- 距离计算实战
上一篇已经说过了如何求一些距离,这一篇我们来实战,检验一下学习成果
转战Halcon日记【5】-- 距离计算 - gammalog - 博客园 (cnblogs.com)上一篇的传送门
这是我们图片,图中有一个本子和airpod
我们的目标是要得到airpod的中心到本子上边界的距离
所有的算子我们之前都讲过了,我们一步一步的来看看图片效果,先上代码
*读取图片
read_image (Image, 'C:/Users/guopei/AppData/Local/Temp/WeChat Files/4d3d55ed492a1490a1d8a195f97658a.jpg')
*灰度化
rgb1_to_gray(Image, GrayImage)
*二值化
threshold (GrayImage, Regions, 0, 131)
*打散
connection(Regions, ConnectedRegions)
*筛选区域(为了得到本子的区域)
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 150000, 999999)
*填充
fill_up(SelectedRegions, RegionFillUp)
*开运算
opening_rectangle1(RegionFillUp, RegionOpening, 10, 10)
*变形
shape_trans(RegionOpening, RegionTrans, 'rectangle2')
*求最小外接矩形(带角度的),Phi是角度,求这个角度是为了后来做准备
smallest_rectangle2(RegionTrans, Row1, Column1, Phi, Length1, Length2)
*求边界
boundary(RegionTrans, RegionBorder, 'inner')
*为了得到airpod的区域
*二值化,打散,筛选区域,填充
threshold (GrayImage, Regions1, 189, 244)
connection(Regions1, ConnectedRegions1)
select_shape(ConnectedRegions1, SelectedRegions1, 'area', 'and', 15000, 99999)
fill_up(SelectedRegions1, RegionFillUp1)
*求中心区域的坐标和面积
area_center(RegionFillUp1, Area, Row, Column)
*生成一个矩形区域
gen_rectangle2(Rectangle, Row-100, Column-100, Phi, 500, 100)
*矩形区域和边界做交集得到一条直线(区域)
intersection(Rectangle, RegionBorder, RegionIntersection)
*生成一点,这个点的坐标是airpod的中心坐标
gen_region_points(Region, Row, Column)
*计算两个区域的最小距离(点和直线都可以理解成区域)
distance_rr_min(Region, RegionIntersection, MinDistance, Row11, Column11, Row2, Column2)
*生成一条直线
gen_region_line(RegionLines, Row11, Column11, Row2, Column2)
我们来描述一下这个变化过程:
1.首先求到本子的区域,就像第二张图一样,很简单
2.求本子区域的边界,第三张图
3.求airpod的区域,第四张图,并计算airpod的中心
4.生成一个和本子角度一样的区域(第五张图)去和本子的边界相交,得到第六张图(第四步是最关键的一步)
5.计算airpod和相交得到的直线的距离,第7张图
mindistance就是这个距离了
上界面截图,over