Halcon 映射校正例程注释(MapImage)
*关闭窗口
dev_close_window ()
dev_close_window ()
*打开指定大小、颜色背景的窗口
dev_open_window (, , /, /, '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 ()
*
* 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.0000086,0.0000086,,,,]
*物体在空间坐标系中的位姿数组
NStartPose := []
*行角点数组
NRow := []
*列角点数组
NCol := []
*X、Y、Z从标定表文件获取计算值
caltab_points (CaltabName, X, Y, Z)
*创建空的图像元组
gen_empty_obj (Images)
*图像的数目
NumImages :=
*接下来for循环,依次读取、处理NumImages张图像
for I := to NumImages by
*读取图像: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, , , )
*设置区域颜色:绿色
dev_set_color ('green')
*显示图像中标定板的区域
dev_display (Caltab)
*(核心函数:搜寻图像的原始点)在图像中找到标定板的各个角点坐标和初始位姿
find_marks_and_pose (Image, Caltab, CaltabName, StartCamPar, , , , 0.9, , , 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 := to NumImages by
* Obtain the pose of the calibration table.
*获取标定出来的位姿3D
Pose := NFinalPose[(NumImage-)*:(NumImage-)*+]
*设置新的原始3D位姿
set_origin_pose (Pose, -1.125, -1.0, , PoseNewOrigin)
*(核心函数)生成带矫正映射信息的图像MapSingle
gen_image_to_world_plane_map (MapSingle, CamParam, PoseNewOrigin, , , , , 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 (, , /, /, 'black', WindowHandle2)
Button :=
NumImage :=
while (Button # )
dev_set_window (WindowHandle1)
dev_set_part (, , , )
dev_clear_window ()
*从图像元组中选择一张图像
select_obj (Images, Image, NumImage)
*显示选择的图像
dev_display (Image)
disp_message (WindowHandle1, 'Press any mouse button to stop', 'image', -, -, 'black', 'true')
*选择对应位置的带矫正信息的图像
select_obj (Maps, MapSingle, NumImage)
*(核心函数)矫正图像:原图,带矫正信息图,矫正结果图
map_image (Image, MapSingle, ImageMapped)
*以下为窗口、循环之类的处理,与图像处理没什么关系
dev_set_window (WindowHandle2)
dev_set_part (, , , )
dev_clear_window ()
dev_display (ImageMapped)
NumImage := NumImage +
if (NumImage > NumImages)
NumImage :=
endif
dev_error_var (Error, )
dev_set_check ('~give_error')
get_mposition (WindowHandle1, R, C, Button)
dev_error_var (Error, )
dev_set_check ('give_error')
if (Error#H_MSG_TRUE)
Button :=
endif
if (Button)
break
endif
endwhile
dev_set_window (WindowHandle2)
dev_close_window ()
Halcon例程代码注释,记录以备查看。
Halcon 映射校正例程注释(MapImage)的更多相关文章
- zw版_zw中文增强版Halcon官方Delphi例程
[<zw版·delphi与halcon系列原创教程>zw版_zw中文增强版Halcon官方Delphi例程 源码下载:http://files.cnblogs.com/files/ziwa ...
- halcon中variation_model_single实例注释.
* This example shows how to employ the new extensions of HALCON's variation model operators* to perf ...
- zw版【转发·台湾nvp系列例程】halcon与delphi系列例程
zw版[转发·台湾nvp系列例程]halcon与delphi系列例程 台湾nvp技术论坛,是目前halcon与delphi例程最多的网站,也是唯一成系列的, http://zip.nvp.com.tw ...
- Halcon一日一练:图像拼接技术2:步骤与例程
上一篇主要介绍了图像拼接的一些原理和方法,这一篇将主要介绍步骤和例程: 接上一篇: 基于特征的接拼方法,分为四个步骤 1.特征检测:从图像中检测出显著且独特的图像特征,诸如:闭合区域,直线段,边缘,轮 ...
- 一个ball例程带你进入 Halcon 世界
* 此例程来自halcon自带例程,请打开 halcon->ctrl+E 打开例程->搜索框中输入ball added by xiejl* ball.hdev: Inspection of ...
- WebService学习之四:关于JAX-WS 注释
基于 XML 的 Web Service 的 Java API"(JAX-WS)通过使用注释来指定与 Web Service 实现相关联的元数据以及简化 Web Service 的开发.注释 ...
- web应用程序servlet的映射名称的规则及请求过程
首先用MyEclipse创建一个web Project(工程名起为TestServletProject),新建一个Servlet(这里servlet的名字起TestServlet),将请求的servl ...
- Vim 自动文件头注释与模板定义
Vim 自动文件头注释与模板定义 在vim的配置文件.vimrc添加一些配置可以实现创建新文件时自动添加文件头注释,输入特定命令可以生成模板. 使用方法 插入模式输入模式输入seqlogic[Ente ...
- Halcon一日一练:CAD类型的相关操作
大很多场合,需要在视觉程序中导入CAD文档,比如,在3C行业,需要对手机外壳进行CNC加工,或者点胶操作,此时,需要获取产品的各个点的数据.如果将CAD直接导入,就会大的减少编程工作量,同时也能达到很 ...
随机推荐
- [转载] ORMs under the hood
原文: http://www.vertabelo.com/blog/technical-articles/orms-under-the-hood It often happens that if so ...
- Javascript设计模式之创建构造函数和方法
构造函数和方法 var Book = function (isbn,title,author) { this.setIsbn(isbn); this.setTitle(title); this.set ...
- caffe中的filler.hpp源码的作用:
filler.hpp文件:(它应该没有对应的.cpp文件,一切实现都是在头文件中定义的,可能是因为filler只分在网络初始化时用到那么一次吧) 1,首先定义了基类:Filler,它包括:一个纯虚函数 ...
- Swift语言学习之学习资源
(1) http://swift.sh (2) Let's Swift – WRITE THE CODE. CHANGE THE WORLD. http://letsswift.com (3)http ...
- [js] 非常好的面试题,学习了。。
原文链接:http://www.cnblogs.com/xxcanghai/p/5189353.html
- HashMap循环遍历方式及其性能对比(zhuan)
http://www.trinea.cn/android/hashmap-loop-performance/ ********************************************* ...
- OpenGL的glTranslatef平移变换函数详解
OpenGL的glTranslatef平移变换函数详解 glTranslated()和glTranslatef()这两个函数是定义一个平移矩阵,该矩阵与当前矩阵相乘,使后续的图形进行平移变换. 我们先 ...
- IE和Firefox的Javascript兼容性总结
长久以来JavaScript兼容性一直是Web开发者的一个主要问题.在正式规范.事实标准以及各种实现之间的存在的差异让许多开发者日夜煎熬.为此,主要从以下几方面差异总结IE和Firefox的Javas ...
- 深入理解Sqlserver索引
1. Sqlserver中索引分为聚集索引和非聚集索引: 聚集索引:表中数据的物理存储的顺序与索引顺序完全相同(字典的按拼音查法),检索效率比非聚集索引高,但对数据更新影响较大. 非聚集索引:表中数据 ...
- 打不开chm文件解决办法
打不开chm文件解决办法.bat regsvr32 itss.dll /sregsvr32 hhctrl.ocx /s