Halcon(根据霍夫变换在图像中找直线)
这是学习的第一个Halcon视觉案例:霍夫变换在图像中找曲线
由于之前了解到的视觉是Ni Vision,对于Halcon也只是了解,今天从第一个例子作为入门。附上代码:
{
*读取一张图片
read_image (Image, ‘C:/Users/58937/Desktop/2222.png’)
*读取图片长宽
get_image_size(Image,width,height) *这里读取当前内存图片Image的长宽
*打开一个窗口
dev_open_window (0, 0, width, height, ‘black’, WindowHandle) *这里新建一个背景颜色黑色的窗口
*根据坐标剪切矩形图像
rectangle1_domain (Image, ImageReduced, 76, 50, 1000, 1000) *这里是根据坐标裁剪图片,我试了要自己修改坐标
*寻找图像中矩形边缘
sobel_amp (ImageReduced, EdgeAmplitude, ‘sum_abs’, 3) *这里新建一个背景颜色黑色的图像窗口(这里得到的效果是当前图像里面矩形边缘,相当于同心的两个矩形)
*设置输出对象颜色
dev_set_color(‘red’) *这里设置里面对象的颜色
*对上面获取的边缘图像进行阈值操作 *阈值的作用:得到一张对比度不同的黑白图像
threshold(EdgeAmplitude,Region,10,255)
*对阈值后的区域联通处理
connection(Region,ConnectedRegions) *这样操作后图片中矩形边缘的两个同心矩形变成且可以一次被选中
*根据面积过滤出团中心矩形区域
select_shape(ConnectedRegions,SelectedRegions,‘area’,‘and’,250,99999) *这样操作后图片中矩形边缘的两个同心矩形可以单独被选
*霍夫变换寻找区域中的直线
hough_lines(SelectedRegions,4,50,5,5,Angle, Dist) *通过霍夫变换(就是根据Y=KX+b,采用Y和X的值生成的不同直线,这些直线都会有一个交点)这样就会有四个交点,也就是矩形的四个点
*设置输出对象颜色
dev_set_color(‘blue’) *将所有直线颜色改为蓝色
*将直线转换为区域
gen_region_hline(Regions,Angle, Dist) *一个对象的轮廓(contour)作为链式码。
*根据方向特征来过滤想要的直线
select_shape(Regions,SelectedRegions1,‘orientation’,‘and’,1.5,1.6) *筛选指定方向的直线
select_shape(Regions,SelectedRegions2,‘orientation’,‘and’,0,0.1)
*显示图像和结果直线
dev_display(Image) *显示图片
dev_display(SelectedRegions1) *显示筛选方向的直线
dev_display(SelectedRegions2)
}