Halcon生成一个标定描述文件、生成棋盘格和保存图片
摘要:本文介绍了相机标定和图像处理的关键操作流程。首先使用gen_caltab()生成7x7规格的标定板(间距0.0125米),然后通过image_points_to_world_plane()实现像素坐标到物理坐标的转换。详细说明了相机内参数(包括焦距、畸变系数等)和外参数(位姿关系)的设置方法,并演示了实际测量流程:从图像读取、blob分析到坐标转换和距离计算。最后介绍了棋盘格生成(gen_c
·
*生成一个标定描述文件:
•生成标定板:gen_caltab()
•像素坐标转物理坐标:image_points_to_world_plane()
*// 生成一个标定描述文件
*// 生成标定板
*// 参数1 X方向内角点数量(个)
*// 参数2 Y方向内角点数量(个)
*// 参数3 相邻两个内角点之间的物理间距(米)
*// 参数4 标记点直径/间距比值
*// 参数5 输出.descr描述文件名
*// 参数6 输出.ps预览图文件名
gen_caltab (7, 7, 0.0125, 0.5, 'caltab.descr', 'caltab.ps')
*// 使用标定助手
*// 给相机内参数数组赋值(标定后得到的相机固有参数)
*// 元素1:相机类型(面阵相机,带畸变矫正)
*// 元素2:相机主距(单位:米)
*// 元素3:畸变系数(径向畸变矫正参数) 正值-桶型畸变 负值-枕型畸变
*// 元素4:X方向单个像素的物理尺寸(单位:米/像素)
*// 元素5:Y方向单个像素的物理尺寸(单位:米/像素)
*// 元素6:图像主点X坐标(光轴中心,单位:像素)
*// 元素7:图像主点Y坐标(光轴中心,单位:像素)
*// 元素8:采集图像宽度分辨率(单位:像素)
*// 元素9:采集图像高度分辨率(单位:像素)
CameraParameters := ['area_scan_division',0.00461822,-1534.94,8.301e-06,8.3e-06,281.446,264.053,640,512]
*// 给相机外参数/位姿数组赋值(相机相对标定板的位姿关系)
*// 元素1:X轴平移量(相机相对标定板X向偏移,单位:米)
*// 元素2:Y轴平移量(相机相对标定板Y向偏移,单位:米)
*// 元素3:Z轴平移量(相机到标定板的垂直距离,单位:米,核心值)
*// 元素4:绕X轴旋转角度(单位:度)
*// 元素5:绕Y轴旋转角度(单位:度)
*// 元素6:绕Z轴旋转角度(单位:度)
*// 元素7:位姿格式固定标识位(恒为0,无实际意义)
CameraPose := [0.0141215,-0.00471132,0.254587,359.909,358.735,180.514,0]
*// 停止运行
stop ()
*// 测量两个圆心的距离
*// 获取图像
read_image (Image, 'C:/Users/ZN/AppData/Roaming/MVTec/HALCON-23.05-Progress/examples/images/calib/calib_distorted_01.png')
*// blob分析-阈值分割
threshold (Image, Regions, 0, 60)
*// 连通器分析
connection (Regions, ConnectedRegions)
*// 面积筛选
select_shape (ConnectedRegions, SelectedRegions, ['area','row','column'], 'and', [134,170,230], [134,171,259])
*// 获取两个圆心中心坐标
area_center (SelectedRegions, Area, Row, Column)
*// 算子:可以把平面坐标(x,y)转换成世界坐标(x,y,z)
*// 图像像素坐标点 转 标定板坐标系下的二维物理坐标,核心坐标转换算子
*// 参数1 输入:相机内参数数组(标定后得到的固有参数)
*// 参数2 输入:相机外参数/位姿数组(相机相对标定板的位姿关系)
*// 参数3 输入:待转换像素点的行坐标Row(像素单位)
*// 参数4 输入:待转换像素点的列坐标Column(像素单位)
*// 参数5 输入:输出物理坐标的单位,固定写'm'=米,不可修改
*// 参数6 输出:转换后的世界坐标系【X轴物理坐标】(单位:米)
*// 参数7 输出:转换后的世界坐标系【Y轴物理坐标】(单位:米)
image_points_to_world_plane (CameraParameters, CameraPose, Row, Column, 'm', X, Y)
*// 获取真实物理坐标数组的第1个点的坐标值
Y1 := Y[0]
X1 := X[0]
*// 获取真实物理坐标数组的第2个点的坐标值
Y2 := Y[1]
X2 := X[1]
*// 测两点之间的距离
distance_pp (X1, Y1, X2, Y2, Distance)
*// 获取窗体句柄
dev_get_window (WindowHandle)
*// 展示照片
dev_display (Image)
*// 文本展示
disp_message(WindowHandle, Distance, 'image',(Row[0]+Row[1])/2, (Column[0]+Column[1])/2, 'black', 'true')
*棋盘格和保存图片:
•生成一个棋盘格:gen_checker_region ()
•把区域转成字节图片:region_to_bin()

*// 生成一个棋盘格//---------------------
*// 512,512 生成区域的大小
*// 64,64 生成格子的大小
gen_checker_region (RegionChecker, 512, 512, 64, 64)
*// 把区域转成字节图片//---------------------
*// ForegroundGray 前景灰度 255
*// BackgroundGray 背景灰度 0
*// 512,512 生成图片的大小
region_to_bin (RegionChecker, BinImage, 255, 0, 512, 512)
希望对大家有所帮助, 感谢大家的关注和点赞。
更多推荐
所有评论(0)