halcon学习第一周

关于halcon的一些算子

跟学视频

链接: 联为机器视觉halcon教程视频

比较常用的算子

read_image(Image, ‘fabrik’)

从系统中读取自己需要处理的图像

get_image_size(Image, Width, Height)

获取图片的大小

dev_clear_window()

关窗口

dev_open_window(0, 0, Width, Height, ‘black’, WindowHandle)

开窗口

dev_display(Image)

显示图片

connection(Region, ConnectedRegions)

把上一步区分出来的区域打散,方便下一步进一步确认需要的区域

select_shape(ConnectedRegions, SelectedRegions, ‘area’, ‘and’, 8100, 8500)

根据特定标志选择特定区域,主要看第三个参数,这里是根据面积筛选区域,面积范围看最后两个参数

threshold(Image, Region, 128, 255)

对图像进行分割--最常用的算子
区域-是一个二值化的对象-意为:只有符合跟不符合两种情况
根据最后两个参数范围选取区域

fill_up(SelectedRegions, RegionFillUp)

填充范围的内部(有的范围内部会有未被选择的小空隙,需要这步进行填充)

reduce_domain(Image, RegionFillUp, ImageReduced)

减小特征范围-抠图定位,之后的操作只在这一片区域内有效,不再和其他部分混淆

count_obj(SelectedContours, Number)

 计算被选中的区域个数

其他算子

第一节

area_center(SelectedRegions, Area, Row, Column)

确定参数一区域的面积中心

gen_cross_contour_xld(Cross, Row, Column, 60, 0.0)

生成一个+ 在区域中心
参数二:x坐标
参数三:y坐标
参数四:大小
参数五:角度

第五节

get_image_time(Image, MSecond, Second, Minute, Hour, Day, YDay, Month, Year)

获取图片时间

get_image_type(Image, Type)

获取图片类型,主要有位图和矢量图

get_image_pointer1(Image, Pointer, Type1, Width1, Height1)

获取图片位置-pointer-指针,指向图片的内存地址,可以跟C语言结合使用

decompose3(Image11, Image1, Image2, Image3)

把彩图的三个通道(RGB)分解下来

compose3(Image1, Image2, Image3, MultiChannelImage)

再把三通道的三张图(RGB)合成一张彩色图

rgb1_to_gray(MultiChannelImage, GrayImage)
rgb3_to_gray(Image1, Image2, Image3, ImageGray)

把RGB转成灰度图,两种方法

trans_from_rgb(Image1, Image2, Image3, ImageResult1, ImageResult2, ImageResult3, ‘hsv’)

也可以把图片分解为色调,饱和度,亮度三个方面

第六节

threshold_sub_pix(ImageReduced, Border, 158)

亚像素轮廓-xld,比像素更精确,是多个点组成的线,根据第三个参数作为边界值

select_contours_xld(Border, SelectedContours, ‘contour_length’, 90, 120, -0.5, 0.5)
参数详解:Halcon 算子:select_counters_XLD-根据几个特征选择XLD轮廓

根据亚像素的'长度'缩小范围
参数四:长度最小值
参数五:长度最大值

gen_region_contour_xld(SelectedContours, Region1, ‘filled’)

把亚像素的范围填充,亚像素->区域

第八节

区域分割常见的三种方法

①二值化阈值,可以自己固定范围进行分割,不够灵活

Gray :=80
threshold(GrayImage, Region, Gray, 255)

②动态阈值
算子根据自己的算法,进行区域划分
第五个参数的值是算子内部计算出来的,不需要我们给

binary_threshold(GrayImage, Region1, ‘max_separability’, ‘light’, UsedThreshold)

③动态阈值
根据周围的像素点的亮度取平均值,使色度平滑,这里是在13x13方块的范围取平均值(一般都是奇数)

mean_image(GrayImage, ImageMean, 13, 13)

*之前的值比平均值要‘亮’‘10’个度以上才显示,便于画物体轮廓

dyn_threshold(GrayImage, ImageMean, RegionDynThresh, 10, ‘light’)

第九节

union1(ConnectedRegions, RegionUnion)

联合  相当于 反打散   把多个区域又合成一个

draw_region(Region2, WindowHandle)

画区域  按住鼠标右键图像自动闭合退出

boundary(RegionClosing, RegionBorder, ‘inner’)

获取边缘区域	

开运算(先腐蚀再膨胀)

以opening开头的算子,例如:

opening_rectangle1(RegionFillUp, RegionOpening, 100, 250)

以100x250的长方形在区域内移动,输出可以容纳该长方形的区域

opening_circle(RegionOpening, RegionOpening1, 3.5)

以3.5为半径的圆在区域内移动,输出可以容纳该圆的区域

闭运算(先膨胀再腐蚀)

以closing开头的算子,例如:

closing_circle(Region3, RegionClosing, 3.5)

先膨胀3.5个像素,再收缩3.5个像素

开运算和闭运算的区别

开运算是"去角"
闭运算是"填坑"

第十节

skeleton(RegionDifference, Skeleton)

骨架,与获取区域边缘差不多

区域之间相交处理

intersection(SelectedRegions, ConnectedRegions1, RegionIntersection)

交集  取两个区域相交的部分

difference(RegionDilation, Region2, RegionDifference1)

取差,取两个区域之间不相交的部分

膨胀和收缩

dilation_circle(Region2, RegionDilation, 3.5)

膨胀  是把参数一这个区域膨胀了3.5个像素形成参数二的区域

erosion_circle(RegionDilation, RegionErosion, 3.5)

收缩 把参数1这个区域收缩了3.5个像素形成参数二的区域

第十二节

作图和生成

draw_circle(WindowHandle, Row, Column, Radius)
gen_circle(Circle, Row11, Column11, 100.5)

画圆

draw_ellipse(WindowHandle, Row, Column, Phi, Radius1, Radius2)
gen_ellipse(Ellipse, Row11, Column11, 0, 100, 60)

画椭圆
参数二:x坐标
参数三:y坐标
参数四:角度
参数五:第一个半径值
参数六:第二个半径值

draw_line(WindowHandle, Row12, Column12, Row22, Column22)
gen_region_line(RegionLines, Row1, Column1, Row2, Column2)

画直线
参数二,参数三:第一个点的坐标
参数四,参数五:第二个点的坐标

draw_point(WindowHandle, Row, Column)

画点
参数二,参数三:点的坐标

draw_rectangle1(WindowHandle, Row12, Column12, Row22, Column22)
gen_rectangle1(Rectangle, Row11, Column11, Row11, Column11)

画长方形,无角度
参数二,参数三:左上角的坐标
参数四,参数五:右下角的坐标

draw_rectangle2(WindowHandle, Row, Column, Phi, Length1, Length2)
gen_rectangle1(Rectangle, Row11, Column11, Row11, Column11)

画长方形,参数四确定角度

draw_region(Region1, WindowHandle)

画区域

第十三节

计算距离

distance_pp(Row11, Column11, Row11, Column11, Distance)

计算两个点的距离

distance_pl(Row11, Column11, Row11, Column11, Row11, Column11, Distance1)

计算点到线的距离

distance_pr(RegionLines, Row11, Column11, DistanceMin1, DistanceMax1)

计算区域最短和最长距离

distance_lr(RegionLines, Row11, Column11, Row11, Column11, DistanceMin2, DistanceMax2)

计算直线到区域最长最短距离

distance_rr_min(RegionLines, RegionLines, MinDistance1, Row12, Column12, Row22, Column22)

计算两个区域最短距离
上一篇:halcon学习笔记-ocr识别


下一篇:ecc200 _training