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)//创建一个句柄
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)//此算子会将图片自动转换为灰度图在进行阈值处理
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)//分析图形圆不圆