单相机标定的时候,不管是助手标定还是代码,识别不出来,出现如下错误,HALCON错误:minimum threshold while searching for ellipses,可以看看下文实际操作

halcon在做单相机标定的时候,不管是助手标定还是代码,识别不出来,出现如下错误,HALCON错误:minimum threshold while searching for ellipses,可以看看下文实际操作方法:主要原因是因为图像对比度不够,使用助手标定,有助于初学者理解相机标定

1、在肉眼对比度非常好的情况下,无法识别,出现报错,如下图

 2、我将海康工业相机CA-060-11的光圈调节到过曝一点,在肉眼感觉过曝,却识别到了,报错消失,如下图,所以我们在代码中出现识别不了,就可以调节图片对比度 scale_image。

所以,我们用自己的眼睛的视觉去理解相机的视觉,很容易把自己带偏,助手有助于我们理解

 3、将曝光调节更大,就又出现了之前的错误,如下图

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Halcon相机标定代码.hdev 1.初始化 for example: Full image (640*480) Subsampling (320*240) ImageWidth 640 320 ImageHeight 480 240 2.标定板初始化 CaltabName := 'caltab_30mm.descr'//标定板描述文件 set_calib_data_calib_object (CalibDataID, 0, CaltabName) 3.创建数据模型 create_calib_data ('calibration_object', 1, 1, CalibDataID) 4.获取标定图片 相机拍摄不同位姿下图片8-15张,拍摄图片时标定板尽量覆盖整个视场(标定板要根据工作距离、视场大小定制);拍摄图片上的圆直径不得小于10个像素 5.加载所有图像,寻找标定板区域,确定圆心,将结果加载到组元中 for I := 1 to NumImages by 1 ... acquire image ... find_caltab (Image, Caltab, CaltabName, SizeGauss, MarkThresh, MinDiamMarks) find_marks_and_pose (Image, Caltab, CaltabName, StartCamPar, StartThresh, \ DeltaThresh, MinThresh, Alpha, MinContLength, MaxDiamMarks, RCoord, CCoord, StartPose) set_calib_data_observ_points (CalibDataID, 0, 0, I, RCoord, CCoord, 'all', StartPose) endfor 下面将Halcon中提取目标点的大致原理说一下: 首先find_caltab 算子对图像高斯滤波(核大小为SizeGauss),接着阈值分割(与之大小为MarkThresh)将标定板的区域找出来, find_marks_and_pose 算子对区域中的圆进行分割,找到圆的个数,周长,坐标位置等应该和标定板描述文件中的一致,否则会自动调整StartThresh,使得StartThresh按照DeltaThresh步长减小到MinThresh,知道找到准确的圆心。 6.有了所有图像中的圆心就可以标定了 calibrate_cameras (CalibDataID, Errors) 返回平均投影误差Errors
Halcon相机标定是通过使用Halcon软件库中的函数和工具来进行的。以下是一个使用Halcon进行相机标定的简示例代码: ```python # 导入Halcon库 from halcon import * # 创建相机对象 camera = create_cameras(1) # 设置相机参数 set_camera_param(camera, "camera_type", "area_scan_division") # 打开相机 open_framegrabber(camera) # 拍摄标定图像 image = grab_image(camera) # 创建标定对象 calib_data = create_calib_data("calibration_object","area_scan_division") # 设置标定参数 set_calib_data_param(calib_data, "num_caltab_cols", 10) set_calib_data_param(calib_data, "num_caltab_rows", 10) # 添加标定图像 add_calib_data(calib_data, image) # 进行相机标定 calibrate_cameras(camera, calib_data) # 保存标定结果 save_calib_data(calib_data, "calibration_result") # 关闭相机 close_framegrabber(camera) ``` 上述代码首先导入Halcon库,并创建一个相机对象。然后通过设置相机参数,如相机类型等。接着打开相机,并拍摄一张标定图像。 之后,代码创建一个标定对象,并设置标定参数,如标定板的行列数等。将标定图像添加到标定对象中。 最后,调用`calibrate_cameras`函数进行相机标定,并保存标定结果。 代码最后关闭相机对象,完成整个相机标定过程。 需要注意的是,以上代码仅是一个简的示例,实际的相机标定可能还需要进行更多的参数设置和步骤。根据具体的应用需求和具体的相机型号,可能会有不同的方法和函数来实现相机标定。因此,在实际应用中,可能需要根据具体情况对代码进行相应的调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值