Halcon之HDevelop的应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w_x_myself/article/details/81661298

常用快捷键

1、取消注释:F3

2、注释:F4

3、运行:F5

6、调用算子编辑窗口:Ctrl+Shift+Space

常用窗口简介

1、图像窗口:用来显示图片

2、程序窗口:用来添加代码

3、变量窗口:图像变量:显示图片的变量名字,控制变量:图像数据

4、算子窗口:用来显示图片的输入输出

5、性能评测器:统计算子执行时间

简单的图像绘制

画圆:

gen_circle(Circle,100,200,100.5)

算子窗口-编辑使用注意事项

1、修改算子窗口参数,点击替换,将更新代码,点击应用将添加代码

图形窗口

1、打开图片方式:将图片直接拖拽至图像窗口中。

2、状态栏显示有图像的宽和高与色彩通道;色彩通道3表示彩色图,通道1表示黑白图片

3、创建新的ROI工具作用:在图像上绘制简单的轮廓图片

      1、选择相应的ROI图像,在图片上绘制,单击左鼠标图形绘制成功

      2、在ROI工具栏上选择插入代码,及在程序窗口生成代码

 灰度直方图

1、打开灰度直方图,通过移动线条,确定阈值范围,将俩个阈值之间的图像输出,如例图:输出红色区域数据

2、量子化:将数据按区间划分

3、平滑:方便获取数据的最高点和最低点

4、颜色:设置输出图像轮廓的显示颜色

5、连接:是否在颜色选择显示出来,并且将显示的区域单个分割开

特征工具

1、在工具栏中打开特征检测工具,选择需要提取的特征

2、鼠标右键点击项目'area'选择插入算子

3、通过监视变量,获取每个图形轮廓的面积,图像窗口的Connection[1]对应变量监视的0。依次类推

4、select_shape (Connection, SelectedRegions, 'area', 'and', max(Area), 99999)  或 select_shape_std (Connection, SelectedRegions, 'max_area', 70)面积选择算子,表示选择面积最大的图像

5、选择相应的图形变量,显示相应的图像变量的特征

halcon代码

read_image (Image1, 'D:/work/halcon/1.png')
threshold (Image1, Regions, 0, 115)//对图片进行阈值处理
connection (Regions, Connection)//将轮廓设置为单独显示
area_center (Connection, Area, Row, Column)//获取图像中的轮廓面积
fill_up (Connection, RegionFillUp)//将图像中间的圆填充掉
select_shape (Connection, SelectedRegions, 'area', 'and', 545.87, 811.93)//获取指定区域面积的轮廓
select_shape (RegionFillUp, SelectedRegions2, 'roundness', 'and', 0.973394, 1)//获取指定范围内图像的圆度

数据类型及运算

1、tuple

a:=[1,2]//初始化数据
b:=[1,6]
d:=a+b//对应数据为相加,如果b为2,a的每项都加1
c:=[a,b]//a与b拼接,形成c
f:=5
g:=2
tuple_real(g,gReal)//将数据g转化为浮点数gReal
ans:=f/gReal
xulie:=[1:2:10]//生成一个序列,参数1:序列开始数,参数2:序列步长,参数3:序列结束最后的数

2、image

convert_image_type (Image1, ImageConverted, 'real')//转换图像像素格式
//设置RGB颜色值
gen_image_proto(Image1,rim,200)
gen_image_proto(Image1,gim,0)
gen_image_proto(Image1,bim,10)
//将颜色值合并
compose3 (rim, gim, bim, MultiChannelImage)
//将图像颜色值拆分
decompose3 (MultiChannelImage, Image11, Image2, Image3)

3、region

表示一个区域

4、xld

表示线

5、handle

表示一堆数据,方便后期调用

create_metrology_model(MetrologyHandle)//创建一个句柄

Image常用算子

1、读取图片

read_image (Image1, 'D:/work/halcon/1.jpg')

2、获取某个点的像素值

get_grayval (Image1, 0, 0, Grayval)//获取某个点的像素值
get_grayval (Image1, [0:10], [0:10], Grayval)//获取多个点像素值

3、获取某个通道的图像

access_channel (Image1, Image, 1)

4、获取亚像素点的值

get_grayval_interpolated (Image, 192.5, 192.2, 'bilinear', Grayval1)

5、获取图像指针,并且通过指针生成图像

**对单通道的图片进行处理
get_image_pointer1 (Image, Pointer, Type, Width, Height)
gen_image1 (Image2, 'byte', Width, Height, Pointer)

**对三通道的图片进行处理
get_image_pointer3 (Image1, PointerRed, PointerGreen, PointerBlue, Type1, Width1, Height1)
gen_image3 (ImageRGB, 'byte', Width1, Height1,PointerRed, PointerGreen, PointerBlue)

6、获取图像尺寸

get_image_size (ImageRGB, Width2, Height2)

7、对图像色彩通道的拆分与合并

decompose3 (ImageRGB, Image11, Image21, Image31)
compose3 (Image11, Image21, Image31, MultiChannelImage)

8、图像的拷贝

copy_image (Image21, DupImage)

9、图像的创建

**创建单通道图像大小与ImageRGB一样,可以指定灰度值
gen_image_proto (ImageRGB, ImageCleared, 125)

10、创建1阶曲面

gen_image_surface_first_order (ImageSurface, 'byte', 1, 1, 1, 256, 256, Width2, Height2)

11、通过ROI获取模块区域图像

gen_region_runs (ROI_0, [177,178,179......])//通过创建新ROI获取
reduce_domain (Image, ROI_0, ImageReduced)//获取摸个区域的ROI
*get_domain (ImageReduced, Domain)
crop_domain (ImageReduced, ImagePart)//获取此区域的最小外接矩形

12、获取某块区域的杂乱程度

intensity (ROI_0, Image, Mean, Deviation)//某块区域的杂乱程度

13、图像修改(尺寸、类型、色彩空间)

convert_image_type (ImagePart1, ImageConverted, 'uint2')//修改图像类型
rgb1_to_gray (ImageZoomed, GrayImage)//将图片转换为灰度图

crop_part (Image, ImagePart2, 0, 0, 400, 635)//获取图像某块区域
change_format (Image, ImagePart1, 400, 635)//小于Image的尺寸,则裁剪一部份区域,大于则放大
zoom_image_factor (Image, ImageZoomed, 0.5, 0.5, 'constant')//将图片缩小
trans_from_rgb (Image1, Image2, Image3, ImageResult1, ImageResult2, ImageResult3, 'hsv')//色彩空间转换

14、涂改某块区域

overpaint_region (ImageReduced, ROI_0, [255,255,255], 'fill')

15、在图像上绘制线

tuple_gen_const(101,255,gval)//在gval中生成101个为255的值
set_grayval (Image3, [0:100], [0:100], gval)

16、阈值处理

threadold(Image,Region,128,255)//此算子会将图片自动转换为灰度图在进行阈值处理

Region常用算子

1、获取连通域中某个轮廓

select_obj (Connection, ObjectSelected, 6)

2、获取某个轮廓的所有点

get_region_points (ObjectSelected, Rows, Columns)

3、通过轮廓点获取轮廓的重心

centerr:=mean(Rows)
centerl:=mean(Columns)
gen_cross_contour_xld (Cross, centerr, centerl, 6, 0.785398)

//
area_center (ObjectSelected, Area, Row, Column)

4、由点生成图形

gen_region_points (Region, Rows, Columns)

5、通过轮廓的点获取封闭轮廓封闭区间内的面积

//方法1:
area_holes (Region, Area1)
//方法2:运用差集的方法
fill_up (Region, RegionFillUp)
difference (RegionFillUp, Region, RegionDifference)

6、数据取反

//取反
complement (RegionDifference, RegionComplement)
//求交集
gen_rectangle1 (ROI_0, 115.382, 226.851, 403.382, 299.095)
gen_rectangle1 (ROI_01, 180.324, 106.926, 257.971, 543.279)
intersection (ROI_0, ROI_01, RegionIntersection)

7、多个object合并成一个

//Connection中多个ROI合并成一个
union1 (Connection, RegionUnion)
//俩个ROI合并成一个
union2(ROI_0, ROI_01, RegionUnion1)

9、常用算子 

 read_image (Mixed01, 'D:/work/halcon/mixed_01.png')
 threshold (Mixed01, Regions, 7, 155)
 connection (Regions, Connection)

 select_obj (Connection, ObjectSelected, 6)

 get_region_points (ObjectSelected, Rows, Columns)

  centerr:=mean(Rows)
  centerl:=mean(Columns)
 gen_cross_contour_xld (Cross, centerr, centerl, 6, 0.785398)

 area_center (ObjectSelected, Area, Row, Column)

 gen_region_points (Region, Rows, Columns)

 area_holes (Region, Area1)
 fill_up (Region, RegionFillUp)

 difference (RegionFillUp, Region, RegionDifference)

 complement (RegionDifference, RegionComplement)
gen_rectangle1 (ROI_0, 153.5, 138.714, 241.029, 563.507)
gen_rectangle2 (TMP_Region, 191.618, 310.654, rad(-93.3662), 123.036, 22.85)
gen_rectangle1 (ROI_0, 207.147, 121.375, 265.029, 514.381)
 gen_rectangle1 (ROI_0, 115.382, 226.851, 403.382, 299.095)
 gen_rectangle1 (ROI_01, 180.324, 106.926, 257.971, 543.279)

 intersection (ROI_0, ROI_01, RegionIntersection)

 union1 (Connection, RegionUnion)
union2(ROI_0, ROI_01, RegionUnion1)
 threshold (Mixed01, Regions, 7, 111)
 move_region (Regions, RegionMoved, 0, 30)//图像移动

 vector_angle_to_rigid(0,0,0,30,30,0,HomMat2D)//变换矩阵,前三个参数表示原始点,后三个参数表示变换后位置点:x,y旋转幅度
 affine_trans_region (RegionMoved, RegionAffineTrans, HomMat2D, 'nearest_neighbor')//实现变换

 mirror_region (RegionAffineTrans, RegionMirror, 'row', 512)//行镜像
 mirror_region (RegionAffineTrans, RegionMirror, 'colum', 512)//列镜像
 mirror_region (RegionAffineTrans, RegionMirror, 'diagonal', 0)//对角线镜像
 transpose_region (Regions, Transposed, 300, 300)//相对于点的镜像
 set_system ('clip_region', 'false')//设置缩放后不对图像进行裁剪
 zoom_region (Regions, RegionZoom, 2, 2)//对坐标进行缩放

 test_equal_region (Regions, Regions, IsEqual)//判断俩个是否相等
 test_region_point (Regions, 193, 275, IsInside)//判断点是否存在其中

 r:=[1,2,3]
 c:=[1,2,3]
 allisinside:=[]
 for i:=0 to |r|-1 by 1
 test_region_point (Regions, r[i], c[i], IsInside1)
 allisinside:=[allisinside,IsInside1]
 endfor

 test_subset_region (Regions, Regions, IsSubset) //判断是否为子集

 clip_region (Regions, RegionClipped, 0, 0, 256, 256)//截取图像
 shape_trans (Regions, RegionTrans, 'rectangle2')//获取最小外接矩形
 clip_region_rel (RegionTrans, RegionClipped, 100, 100, 100, 100)//依据最小外接矩形对图像进行切割

*提取物体的中心位置
 get_image_size (Mixed01, Width, Height)
 distance_transform (Regions, DistanceImage, 'chessboard', 'true', Width, Height)

 fill_up (Regions, RegionFillUp)//将所有有孔区域全部填充

 fill_up_shape (Regions, RegionFillUp, 'area', 1, 1600)//填充某个面积范围内的孔
 skeleton (RegionFillUp, Skeleton)//求轮廓骨架
 skeleton (Regions, Skeleton1)

 junctions_skeleton (Skeleton1, EndPoints, JuncPoints)//骨架末端点

 boundary (RegionFillUp, RegionBorder, 'inner')  //求物体轮廓,如果有孔不想获取起轮廓,可以直接用inner_filled

 sort_region (Connection, SortedRegions, 'first_point', 'true', 'column')//对轮廓进行排序

 count_obj (Connection, Number)
 for i:=1 to Number by 1
     select_obj (Connection, ObjectSelected, i)
     get_region_points(ObjectSelected, Rows, Columns)
     tuple_min(Columns, Min)
     tuple_find (Columns, Min, Indices)
     duiyingderow:=Rows[Indices]
     duiyingdecol:=Columns[Indices]
    
     gen_cross_contour_xld (Cross, duiyingderow, duiyingdecol, 6, 0.785398)
     stop()
 endfor
read_image (Rings02, 'D:/work/halcon/rings_02.png')
threshold (Rings02, Regions, 0, 85)
 shape_trans (Regions, RegionTrans, 'rectangle1')//形状变换
 partition_rectangle (Regions, Partitioned, 10, 10000)//数据切割
area_center (Regions, Area, Row, Column)
smallest_rectangle1 (Regions, Row1, Column1, Row2, Column2)
roundness (Regions, Distance, Sigma, Roundness, Sides)//分析图形圆不圆

猜你喜欢

转载自blog.csdn.net/w_x_myself/article/details/81661298
今日推荐