转战Halcon日记【3】-- 图片转正+抠图
作者:互联网
转战Halcon日记【1】-- 图片读取 - gammalog - 博客园 (cnblogs.com)
转战Halcon日记【2】-- 灰度化和二值化 - gammalog - 博客园 (cnblogs.com)
经过日记【1】和日记【2】的修练,来实现一个实际的例子
我们的目的是要把这个钉子抠出来,得到抠出来的图和自动旋转成水平方向的图
输入图:
目标结果:
*读图片就不在过多赘述
read_image (Image, 'C:/Users/59436/Desktop/017.png') *二值化 前面也讲过 threshold (Image, Region, 60, 120)
*将区域分开来的一个算子(估计会经常用到的一个算子)
*第一个参数是二值化之后的图像
*第二个参数是分开后的区域的集合
connection (Region, ConnectedRegions)
*筛选区域的一个算子,很好理解,就是通过某种条件去筛选想要的区域
*第一个参数是区域的一个集合,第二参数是筛选后的区域保存在这个变量种
*第三个参数表示以什么条件筛选,我这里是以面积进行筛选的,这个条件halcon给了很多,只能慢慢摸索学习了
*第五个和第六个参数分别代表了面积的最大值和最小值,通俗来说筛选出面积在这个范围的区域
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 80000, 85000)
*smallest_rectanle2类似于opencv中finder_counter之后用cv2.minarearect()
*第一个参数就是我们筛选出来的那个区域
*第二个参数到最后的参数分别代表计算出来的区域的中心的行数、区域中心的列数、角度、区域长边的数值的一半、区域短边的数值的一半
*ps:值得注意的是
*Lenghts1始终大于Lenghts2,所以在确定宽和高的时候要特别注意
*phi是弧度,在之后旋转的时候要转成角度 1弧度 = 180/Π smallest_rectangle2 (SelectedRegions, Row, Column, Phi, Lenghts1, Lenghts2)
*smallest_rectanle1相当于opencv中finder_counter之后用的cv2.boundingrect()
*第一个参数是筛选出来的区域
*第二个参数到最后的参数分别表示左上顶点的行,左上顶点的列,右下顶点的行,右下顶点的列 smallest_rectangle1(SelectedRegions, Row1, Column1, Row2, Column2)
*弧度转角度,初中知识,百度可查 ratio := 180/3.1415
*旋转图片
*第一个参数是需要旋转的图片,第二个参数是选之后的图片
*第三个参数是旋转的角度,第四个参数是插值的方式,默认就这个
rotate_image(Image, ImageRotate, -ratio*Phi, 'constant')
*抠图
*第一个参数是需要抠图的图片,第二个参数抠图后的图片
*第三个到最后的参数分别是抠图的起始点行数、抠图的起始点列数,抠图的宽,抠图的高 crop_part(ImageRotate, ImagePart, Row-Lenghts2, Column-Lenghts1, 2*Lenghts1, 2*Lenghts2) crop_part(Image, ImagePart1, Row1, Column1,Column2-Column1,Row2-Row1)
*保存图片
*第一个参数需要保存的图片,第二个参数是保存图片的后缀名,第三个参数默认为0,第四个参数是保存的路径 write_image(ImagePart, 'png', 0, 'demo_rotate') write_image(ImagePart1, 'png', 0, 'demo')
然后我们来看一看整个流程得到的图片是整么样的
截图界面
标签:smallest,--,Image,Halcon,区域,参数,筛选,日记,图片 来源: https://www.cnblogs.com/guligedong-rose/p/16408414.html