*关闭窗口
  dev_close_window ()
  dev_close_window ()
  *打开指定大小、颜色背景的窗口
  dev_open_window (0, 0, 768/2, 576/2, 'black', WindowHandle1)
  dev_update_pc ('off')
  dev_update_window ('off')
  dev_update_var ('off')
  dev_update_time ('off')
  dev_set_draw ('margin')
  dev_set_line_width (3)
  *  
  * Calibrate the camera.(标定相机)步骤一
  *
  * 标定板描述文件
  CaltabName := 'caltab_big.descr'
  * make sure that the file 'CaltabDescrName' is in the current directory,
  * the HALCONROOT/calib directory, or use an absolut path
  *初始相机参数:焦距、畸变系数Kappa,Sx,Sy,Cx,Cy,ImageWidth,ImageHeight
  StartCamPar := [0.008,0,0.0000086,0.0000086,384,288,768,576]
  *物体在空间坐标系中的位姿数组
  NStartPose := []
  *行角点数组
  NRow := []
  *列角点数组
  NCol := []
  *X、Y、Z从标定表文件获取计算值
  caltab_points (CaltabName, X, Y, Z)
  *创建空的图像元组
  gen_empty_obj (Images)
  *图像的数目
  NumImages := 10
            *接下来for循环,依次读取、处理NumImages张图像
             for I := 1 to NumImages by 1
                 *读取图像:Image得到图像数据
                 read_image (Image, 'calib/calib-3d-coord-'+I$'02d')
                 *将单个Image加入元组Images中
                 concat_obj (Images, Image, Images)
                 *显示Image
                 dev_display (Image)
                 *在图像中找到标定板的区域:图像,标定板描述文件,滤波核大小,二值化值
                 find_caltab (Image, Caltab, CaltabName, 3, 112, 5)
                 *设置区域颜色:绿色
                 dev_set_color ('green')
                 *显示图像中标定板的区域
                 dev_display (Caltab)
                 *(核心函数:搜寻图像的原始点)在图像中找到标定板的各个角点坐标和初始位姿
                 find_marks_and_pose (Image, Caltab, CaltabName, StartCamPar, 128, 10, 18, 0.9, 15, 100, RCoord, CCoord, StartPose)
                 *设置颜色:红色
                 dev_set_color ('red')
                 *在窗口上圆形标记角点的位置
                 disp_circle (WindowHandle1, RCoord, CCoord, gen_tuple_const(|RCoord|,1.5))
                 *一个图像位姿加入位姿元组
  NStartPose := [NStartPose,StartPose]
  *所有图像角点行坐标数组相连
  NRow := [NRow,RCoord]
  *所有图像角点列坐标数组相连
  NCol := [NCol,CCoord]
  endfor
  dev_update_time ('on')
  disp_continue_message (WindowHandle1, 'black', 'true')
  stop ()
  *  
  * Calculate the mapping.(计算带矫正信息的图像)步骤二
  *  
  *(核心函数)标定相机参数,对步骤一的数据进行计算处理
  camera_calibration (X, Y, Z, NRow, NCol, StartCamPar, NStartPose, 'all', CamParam, NFinalPose, Errors)
  *生成空的对象:包含矫正映射信息的图像
  gen_empty_obj (Maps)
  *for循环一次处理一组对应的图像
  for NumImage := 1 to NumImages by 1
  * Obtain the pose of the calibration table.
  *获取标定出来的位姿3D
  Pose := NFinalPose[(NumImage-1)*7:(NumImage-1)*7+6]
  *设置新的原始3D位姿
  set_origin_pose (Pose, -1.125, -1.0, 0, PoseNewOrigin)
  *(核心函数)生成带矫正映射信息的图像MapSingle
  gen_image_to_world_plane_map (MapSingle, CamParam, PoseNewOrigin, 768, 576, 900, 800, 0.0025, 'bilinear')
  *将单张图像加入图像元组Maps
  concat_obj (Maps, MapSingle, Maps)
  endfor
  disp_continue_message (WindowHandle1, 'black', 'true')
  stop ()
  *代码到此处:有了NumImages张标定的原图 + NumImages张带矫正映射信息的图像,
  *接下来While循环,一张一张的矫正图像
  *  
  * Map the images.(矫正图像)步骤三
  *  
  *窗口设置
  dev_open_window (0, 391, 900/2, 800/2, 'black', WindowHandle2)
  Button := 0
  NumImage := 1
  while (Button # 1)
      dev_set_window (WindowHandle1)
      dev_set_part (0, 0, 575, 767)
      dev_clear_window ()
      *从图像元组中选择一张图像
      select_obj (Images, Image, NumImage)
      *显示选择的图像
     dev_display (Image)
     disp_message (WindowHandle1, 'Press any mouse button to stop', 'image', -1, -1, 'black', 'true')
     *选择对应位置的带矫正信息的图像
     select_obj (Maps, MapSingle, NumImage)
     *(核心函数)矫正图像:原图,带矫正信息图,矫正结果图
     map_image (Image, MapSingle, ImageMapped)
     *以下为窗口、循环之类的处理,与图像处理没什么关系
     dev_set_window (WindowHandle2)
     dev_set_part (0, 0, 799, 899)
     dev_clear_window ()
     dev_display (ImageMapped)
     NumImage := NumImage + 1
     if (NumImage > NumImages)
         NumImage := 1
     endif
     dev_error_var (Error, 1)
     dev_set_check ('~give_error')
     get_mposition (WindowHandle1, R, C, Button)
     dev_error_var (Error, 0)
     dev_set_check ('give_error')
     if (Error#H_MSG_TRUE)
         Button := 0
     endif
     if (Button)
         break
     endif
 endwhile
 dev_set_window (WindowHandle2)
 dev_close_window ()

Halcon消除畸变相关推荐

  1. 关于摄像头广角畸变,利用OpenCV的方法消除畸变

    import cv2# 读取原始图像 img = cv2.imread('1.jpg')# 相机矩阵 K = [[fx, 0, cx],[0, fy, cy],[0, 0, 1]]# 畸变系数 dis ...

  2. OpenCV-Python 相机校准和消除畸变

    目标 在本节中,我们将学习 由相机引起的失真类型, 如何找到相机的固有和非固有特性 如何根据这些特性使图像不失真 基础 一些针孔相机会给图像带来明显的失真.两种主要的变形是径向变形和切向变形.径向变形 ...

  3. Halcon :畸变矫正与标定(2)

    相机标定 1.相机标定是什么 2.怎么使用halcon进行相机内外参标定? (1)搭建硬件 1.**相机连好电脑,用相机厂家软件打开相机,检查一下相机是否正常.** 2.**接下来使用halcon连接 ...

  4. Halcon: 畸变矫正与标定(1)

    1. Halcon相机标定和图像矫正     对于相机采集的图片,会由于相机本身和透镜的影响产生形变,通常需要对相机进行标定,获取相机的内参或内外参,然后矫正其畸变.相机畸变主要分为径向畸变和切向畸变 ...

  5. Halcon之畸变标定Grid-Rectification

    1.官方例程 C:\Users\Public\Documents\MVTec\HALCON-18.11-Progress\examples\hdevelop\Tools\Grid-Rectificat ...

  6. 图像处理中消除相机透镜畸变和视角变换

    from:图像处理中消除相机透镜畸变和视角变换 一般的针孔相机模型如下: 三维坐标点经过透视投影变换,转换到一个图像平面坐标点. 而相机透镜还存在一定的畸变,包括横向畸变和切向畸变. 因此,针孔相机模 ...

  7. 【halcon 线扫相机二维码矫正算法】

    halcon 线扫相机畸变二维码矫正算法 线扫相机拍照畸变 1.二维码定位与裁剪 图像矫正 运行结果 总结 线扫相机拍照畸变 线扫相机拍摄图片分辨率较高,但是由于相机本身或者或者拍照目标的运动,容易造 ...

  8. halcon,什么是标定?怎么标定?标定获得了什么?标定能干什么?

    以下为个人见解,如有错误,欢迎指出! 什么时候可以标定? 当你的工作环境即相机之类搭建完成后可以进行标定. 什么是标定? 总说标定标定,那么标定是什么呢? 在我看来,标定是在halcon通过一系列的操 ...

  9. StereoRectify()函数定义及用法畸变矫正与立体校正

    畸变矫正是上一篇博文的遗留问题,当畸变系数和内外参数矩阵标定完成后,就应该进行畸变的矫正,以达到消除畸变的目的,此其一. 在该系列第一部分的博文中介绍的立体成像原理中提到,要通过两幅图像估计物点的深度 ...

最新文章

  1. git 开源 java_开源中国GIT中Java分类下TOP10项目的活动情况分析
  2. android+4.4+稳定性,新系统新UI!台电A10h四核安卓4.4.2性能测试
  3. access游戏库不显示 ea_EAAccess服务Steam平台售价一览 EAAccess服务常见问题解答
  4. mojang官方正版服务器,《我的世界》如果Mojang上线最新版本,你最想要的是哪种版本更新...
  5. Linux 初始化系统 systemd - journald 日志
  6. 结对编程2-单元测试
  7. 光流在视频检测和分割的再应用
  8. OpenCV 图片模糊处理
  9. ES6阮一峰读书笔记第一章let和const命令
  10. 利用Echarts+阿里云地图选择器绘制可交互的行政区划地图
  11. 指纹识别算法MZFinger5.0
  12. 数字系统的设计层级(行为级、RTL、门级)
  13. Application Transport Security has blocked a cleartext HTTP (http://) resource load since it is inse
  14. Windows10系统安装与初始化设置
  15. css去除图片或元素的背景颜色【透明】
  16. 云服务器惠普版_云服务器惠普版_工作进度通报,笔记本开箱目录20200531版
  17. centos tcpdump
  18. lib lib32 lib64等lib文件夹的说明
  19. 玩吃鸡时错误服务器维护,更新吃鸡时发生错误无法连接服务器 | 手游网游页游攻略大全...
  20. 蜘蛛图表SpiderChart

热门文章

  1. MATLAB之多项式计算
  2. 深度学习第三天-卷积神经网络(CNN):乳腺癌识别
  3. java通过进程名称杀进程_根据进程名杀死进程 -kill进程名
  4. VC++各种文件作用
  5. linux vt码的学习和使用
  6. 最简单的Ogre系列之二——画线
  7. 计算机重启遇到你的账户已被停用,win10 administrator你的账户已被停用怎么办
  8. 随手记获2亿美元C轮融资,随手记投资安全吗?
  9. hackrf前期安装日志
  10. AWS KVS(Kinesis Video Streams)之WebRTC移植编译(三)