ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

halcon学习第一周

2021-07-23 18:03:34  阅读:345  来源: 互联网

标签:第一周 Column11 WindowHandle halcon 学习 区域 参数 算子 Row11


关于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)

计算两个区域最短距离

标签:第一周,Column11,WindowHandle,halcon,学习,区域,参数,算子,Row11
来源: https://blog.csdn.net/moqi__/article/details/119032676

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有