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直接导入,就会大的减少编程工作量,同时也能达到很 ...
随机推荐
- THE SENSE OF BEAUTY
#include<stdio.h> int main() { ][] = { " ,.:;j", " ,: i. .,:;ff", " : ...
- Java数组实现五子棋功能
package ch4; import java.io.*; /** * Created by Jiqing on 2016/11/9. */ public class Gobang { // 定义棋 ...
- Linux GDB Debug
http://blog.jobbole.com/107925/ gdb 调试入门,大牛写的高质量指南 http://blog.jobbole.com/107759/ gdb是the GNU Debug ...
- UIImageView 的contentMode属性
UIViewContentModeScaleToFill UIViewContentModeScaleAspectFit UIViewContentModeScaleAspectFill UIView ...
- laravel各种路径的获取方法
若Route中有Route::get('home/test', 'HomeController@index')->name('test'); ①视图中的href跳转 一.<a href=& ...
- 记录一下表格用poi的导出word
也是网上找的代码http://53873039oycg.iteye.com/blog/2152009,但是横向合并单元格没成功.只能用很蠢的办法建立了好多table public void fillT ...
- [C:\Users\Administrator\.IntelliJIdea2016.1\system\tomcat\Unnamed_demo_2\work\Catalina\localhost\demo\org\apache\jsp\index_jsp.java]
http://www.oschina.net/question/1444338_2146454?sort=time
- Python核心编程-描述符
python中,什么描述符.描述符就是实现了"__get__"."__set__"或"__delete__" 方法中至少一个的对象.什么是非 ...
- C\C++头文件说明
C\C++编程时候经常会遇到头文件问题而出现一系列的调试错误,下面我就简要的举例介绍一下头文件的作用,我们知道一个C\C++ 程序中开头一般都为: #include<iostream.h> ...
- Python开发简单爬虫 - 慕课网
课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序 课程目录 第1章 课程介绍 ...