资源描述
HALCON函数
dev_close_window ( : : : ) 关闭活跃的图形窗口。
read_image ( : Image : FileName : ) ;加载图片
rgb1_to_gray (Audi, Audi2)
将rgb转化为灰度图
get_image_pointer1 ( Image : : : Pointer, Type, Width, Height ) ;获得图像的数据。如:类型(= ' 字节',' ' ',uint2 int2 等等) 和图像的尺寸( 的宽度和高度)
dev_open_window( : :Row,Column,WidthHeight,Background :WindowHandle ) 打开一个图形的窗口。
dev_open_window_fit_image (ImageOrig, 0, 0, -1, -1, WindowHandle)
打开一个合适于图片的窗口。
dev_set_window (WindowHandle2)
激活一个窗口
dev_set_part ( : : Row1, Column1, Row2, Column2 : )
修改图示像显的位置
dev_set_draw (’fill’) 填满选择的区域(填充 )
dev_set_draw (’margin’) 显示的对象只有边缘线
dev_set_line_width (3) 设置线宽
threshold ( Image : Region : MinGray, MaxGray : ) 选取从输入图像灰度值的g 满足下列条件:MinGray < = g < = MaxGray 的像素。
dev_set_colored (number) 显示region 是用到的颜色数目
dev_set_color ( : : ColorName : ) 指定颜色
dev_clear_window ( : : : ) 清除视图窗体
reduce_domain // 产生一个图形区域的对象
rectangle1_domain ( Image : ImageReduced : Row1, Column1, Row2,
Column2 : )
根据矩形坐标(Row1, Column1)、(Row2,Column2)得到区域视为Image图像的定义域。
connection ( Region : ConnectedRegions : : ) 合并所有选定像素触摸相互连通区
fill_up ( Region : RegionFillUp : : ) 填补选择区域中空洞的部分
fill_up_shape ( Region : RegionFillUp : Feature, Min, Max : )
select_shape ( Regions : SelectedRegions : Features, Operation, Min, Max : ) 选择带有某些特征的区域,Operation 是运算,如“与”“或”
smallest_rectangle1 ( Regions : : : Row1, Column1, Row2, Column2 ) 以矩形像素坐标的角落,Column1,Row2(Row1,Column2) 计算矩形区域( 平行输入坐标轴) 。
dev_display ( Object : : : ) 显示图片
disp_rectangle1 ( : : WindowHandle, Row1, Column1, Row2, Column2 : ) 显示的矩形。disp_rectangle1 显示一个或多个矩形窗口的产量。描述一个矩形左上角(Row1,Column1) 和右下角(Row2,Column2) 。
texture_laws ( Image : ImageTexture : FilterTypes, Shift, FilterSize : )
texture_laws 实行纹理变换图像FilterTypes: 预置的过滤器Shift :减少灰度变化FilterSize :过滤的尺寸
gen_empty_obj (XLDContours)
生成一个空对象的元组。
8、grab_image_start ( : : AcqHandle, MaxDelay : )
開始抓拍
只有當和grab_image_async or grab_data_async一起使用時,grab_image_start 才會起作用。
draw_rectangle1 (WindowID, Row1, Column1, Row2, Column2)
/画一个矩形
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
获取矩形区域,
gen_rectangle2( : Rectangle : Row, Column, Phi, Length1, Length2 : )
创建任意方向的一个矩形,控制输入分别为矩形中心的行列坐标,矩形纵向与水平方向的夹角,长和宽的一半。
create_template (ImageReduced, 5, 4, 'sort', 'original', TemplateID)
准备一个模板匹配的模式。
fast_match_mg (Image, Matches, TemplateID, 20, 3)
搜索所有好的灰度值匹配一个金字塔。
zoom_image_factor (Clip, ImageZoomed, 0.5, 0.5, 'constant')
缩放图像
gen_contours_skeleton_xld (ModelRegions, Model, 1, 'filter')
一个框架转换成XLD轮廓
angle_ll //两条线之间的角度
points_sojka()
获取在拐角上的点的坐标、
points_lepetit()/points_harris()
检测的兴趣点
gen_cross_contour_xld()
根据坐标生成十字叉
mean_image ( Image : ImageMean : MaskWidth, MaskHeight : )
平滑图像, 原始灰度值的平均数MaskWidth: 过滤器的宽度面具
bin_threshold ( Image : Region : : ) 自动确定阈值 Region: 黑暗的区域的图像
dyn_threshold ( OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : )
比较两个像素的图像像素RegionDynThresh(Out) 分割区域Offset: 减少噪音引起的问题LightDark 提取光明、黑暗或类似的地方
dilation_circle ( Region : RegionDilation : Radius : ) 扩张有一个圆形结构元素的地区 Radius 圆半径
dilation_rectangle1 ( Region : RegionDilation : Width, Height : ) 扩张有矩形元素地区 Width 构建的矩形的宽度
erosion_circle (SelectedRegions, RegionErosion, 3.5)
腐蚀圆
complement ( Region : RegionComplement : : ) 返还补充的区域
opening_circle ( Region : RegionOpening : Radius : )
先腐蚀后膨胀的过程称为开运算。
用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。
Closing_circle ( Region : RegionOpening : Radius : )
先膨胀后腐蚀的过程称为闭运算。
用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积。
get_mbutton ( : : WindowHandle : Row, Column, Button ) 原地等待直到鼠标按下
select_region_point ( Regions : DestRegions : Row, Column : )
选择所有包含给定像素的区域
difference ( Region, Sub : RegionDifference : : )
两个区域做差
gen_region_line ( : RegionLines : BeginRow, BeginCol, EndRow, EndCol : ) 计算区域(起始点和终点)中的线段
intersection ( Region1, Region2 : RegionIntersection : : ) 计算两个区域的交叉点
shape_trans ( Region : RegionTrans : Type : ) 变换形状,形状取决于Type
sort_region (SelectedRegions, SortedRegions, 'upper_left', 'true', 'row')
设置区域排列的顺序
disp_message (WindowHandle, Class, 'window', 20, 20, 'black', 'true')
在屏幕上显示信息
10.smallest_rectangle2(Regions : : : Row, Column, Phi, Length1, Length2)
返回包含一个区域的最小环绕矩形。
11.gen_measure_rectangle2( : : Row, Column, Phi, Length1, Length2, Width, Height, Interpolation : MeasureHandle)
返回和矩形边垂直的边缘
坐标系转换---旋转图片
12.rotate_image (ImagePolar, ImageRotate, 180, 'constant')
根据旋转图像
13.text_line_orientation ()
获取文字的角度
vector_angle_to_rigid (Row, Col, Phi, Row1, Col1, Phi1, HomMat2D)
根据点和角度进行坐标系旋转(HomMat2D-----输出变换矩阵)
Row, Col, Phi——需移动点的坐标、方向
Row1, Col1, Phi1——目标点的坐标、方向
14.hom_mat2d_identity (HomMat2DIdentity)
定义均匀的二维数组
15 hom_mat2d_rotate( HomMat2D, Phi, Px, Py : HomMat2DRotate)
根据角度转化坐标系
hom_mat2d_invert (HomMat2DRotate, HomMat2DRotateBack)
转回原来坐标系。
affine_trans_image (ImageOrig, Image2, HomMat2D, 'constant', 'false')
根据坐标系移动旋转图片
affine_trans_contour_xld( )
根据坐标移动系旋转轮廓
字符识别
read_ocr_class_mlp ('Pharma.omc', OCRHandle)
从文件中读取一个OCR分类器
do_ocr_multi_class_mlp (SortedRegions, ImageResult3, OCRHandle, Class, Confidence)
识别出OCR,保存在class中
do_ocr_single_class_mlp (SingleChar, Image, OCRHandle, 2, Class, Confidence)
一个字符一个OCR进行分类
set_tposition (Operator)
设置文本光标的位置
write_string (WindowID, Class[0])
打印文字在窗口
create_lexicon ('label', ['BEST','BEFORE','END'], LexiconHandle)
创建一个元组词的词典
paint_region (Rectangle1, Image, ImageResult, 0, 'fill')
用颜色填充区域
edges_sub_pix (ImageReduced, Edges, 'canny', 1, 20, 40)
使用亚像素找出边界
3.fill_up_shape(Region : RegionFillUp : Feature, Min, Max : )
填充具有某种形状特征的区域,并输出填充区域,形状特征包括
7.smallest_circle(Regions : : : Row, Column, Radius)
包含区域的最小圆。算法:该圆以区域中心为圆心,0.5步长递进
gauss_image (Image, ImageGauss, 5) //对图像进行高斯滤波//
fit_circle_contour_xld (Edges, 'algebraic', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
拟合近似XLD轮廓的圆圈。
disp_circle (3600, Row, Column, Radius)
显示圆
disp_cross (WindowHandle, RCoord, CCoord, 6, 0)
显示十字架
例如—找圆
edges_sub_pix (ImageReduced, Edges, 'canny', 1, 20, 40)
亚像素找边
* select_shape_xld (Edges, SelectedXLD, 'area', 'and', 150, 99999)
选择轮廓区域
fit_circle_contour_xld (Edges, 'algebraic', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
拟合一个类似圆的轮廓
disp_circle (3600, Row, Column, Radius)
显示圆(圆心坐标,半径)
threshold_sub_pix (ImageReduced, Edges, 75)
先阈值后找出边来
例如--找边
edges_sub_pix (ImageReduced, Edges, 'canny', 1, 20, 40)
select_shape_xld (Edges, SelectedXLD, 'height', 'and', 150, 99999)
fit_line_contour_xld (SelectedXLD, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
disp_line (3600, RowBegin, ColBegin, RowEnd, ColEnd)
OCR找车牌号
read_image (Audi2, 'audi2')
* fill_interlace (Audi2, ImageFilled, 'odd')
//图像处理
threshold (Audi2, Region, 0, 90)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'width', 'and', 30, 70)
select_shape (SelectedRegions, Letters, 'height', 'and', 60, 110)
* sort_region (Letters, SortedRegions, 'upper_left', 'true', 'column')
排序区域
dev_clear_window ()
dev_set_colored (12)
dev_display (Audi2)
dev_display (Letters)
read_ocr_class_mlp ('Industrial_0-9A-Z.omc', OCRHandle)
do_ocr_multi_class_mlp (Letters, Audi2, OCRHandle, Class, Confidence)
* area_center (Letters, Area, Row, Column)
disp_message (3600, Class, 'window', 12, 12, 'black', 'true')
union1 (Darks, Dark)
所有输入区域的联合。
图像采集相机参数
open_framegrabber ( : : Name, HorizontalResolution,
VerticalResolution, ImageWidth, ImageHeight, StartRow, StartColumn,
Field, BitsPerChannel, ColorSpace, Generic, ExternalTrigger,
CameraType, Device, Port, LineIn : AcqHandle )
打开图像采集设备
参数信息:
Name:图像采集设备的名称
HorizontalResolution和VerticalResolution:分别指预期的图像采集接口的水平分辨率和垂直分辨率
ImageWidth和ImageHeight:指预期图像的宽度部分和高度部分。
StartRow和StartColumn:指显示预期图像的开始坐标
Field:预期图像是一半的图像或者是完整图像
BitsPerChannel:每像素比特数和图像通道
ColorSpace:输出的色彩格式的抓住图像{gray、raw、rgb、yuv、default}
Generic:通用参数与设备细节部分的具体意义。
ExternalTrigger:是否有外部触发
CameraType:使用相机的类型
Device:图像获取设别连接到的设备
Port:图像获取设别连接到的端口
LineIn :相机输入的多路转接器
AcqHandle:图像获取设备的Handle
图像采集
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', 'USB Webcam', 0, -1, AcqHandle)
* grab_image_start (AcqHandle, -1)
* grab_image_async (Image, AcqHandle, -1)
* close_framegrabber (AcqHandle)
模版匹配
reduce_domain (ModelImage, ModelROI, ImageROI)
减少图像区域
1.create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast : ModelID)
为匹配准备一个形状模型。模型产生于多个图像金字塔级数,并储存在内存中。每个级数再进行多次旋转。最高的金字塔级数最少需要四个特征点进行匹配。
create_shape_model_xld()创建模板
inspect_shape_model (ImageROI, ShapeModelImage, ShapeModelRegion, 1, 30)
创建一个形状的表示模型。===它检查参数的适用性,还能帮助找到合适的参数
get_shape_model_contours( ) 获得这个模板的轮廓
2.find_shape_model (WaferDies, ModelID, 0, 0, MinScore, NumMatches, 0.5, 'least_squares', 0, Greediness, MatchRow, MatchColumn, MatchAngle, MatchScore)
查找图像中的形状模型的最佳匹配
vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D)
HomMat2D-----输出变换矩阵--根据点和角度进行坐标系旋转
affine_trans_image (ImageOrig, Image2, HomMat2D, 'constant', 'false')
根据坐标系旋转图片
affine_trans_contour_xld( )根据坐标系旋转轮廓
1. hom_mat2d_identity (HomMat2DIdentity)
2. hom_mat2d_rotate (HomMat2DIdentity, -Phi, Column1, Row1, HomMat2DRotate)
3. vector_angle_to_rigid (Row1, Column1, Phi, Row1, Column1, 0, HomMat2DRotate)
1+2=3
dev_display_shape_matching_results ()显示形状模版匹配。
create_template_rot (ImageReduced, 4, 0, rad(360), rad(1), 'sort', \
'original', TemplateID)
准备与旋转模板匹配的模式。
gen_empty_obj (Chambers)
创建一个空对象的元组
concat_obj (Chambers, Rectangle, Chambers)
组合两个物体
decompose3 (ImageReduced, ImageR, ImageG, ImageB)
三通道的图像转换成三张图片
intersection (Chamber, Pills, Pill)
两个区域的交集部分
min_max_gray (Pill, ImageB, 0, Min, Max, Range)
获取区域的最大和最小阈值
boundary (Region, RegionBorder, 'inner_filled')
返回区域边界
get_contour_xld (Edges, Row2, Column2)
获取轮廓上点的坐标
读取多张图片
ImagePath:=[]
ImagePath [0]:= '路径+图片名1'
ImagePath [1]:= '路径+图片名2'
ImagePath [2]:= '路径+图片名3'
for i:=0 to 2 by 1
read_image(Image,ImagePath[i])
endfor
添加Halcon库文件目录
在C++头文件中加入#include<halconcpp.h>并且加入命名空间 using name space HALCON;
#include "HalconCpp.h"
using namespace Halcon;
在C++源文件中也加入#include<halconcpp.h>并且加入命名空间 using name space HALCON;
这里“$”是绝对引用的意思。无论你的halcon装在哪个盘的目录下,均可通过这个绝对引用来导入路径
$(HALCONROOT)\include\cpp
$(HALCONROOT)\include
如图
$(HALCONROOT)\include;$(HALCONROOT)\include\cpp
下图 添加$(HALCONROOT)\lib\$(HALCONARCH)路径。
$(HALCONROOT)\lib\$(HALCONARCH)
在项目属性->链接器->输入->附加依赖项->halconcpp.lib
在工具->选项->常规->VC++目录->库文件添加($(HALCONROOT)\lib\x86sse2-win32)如图
工具->选项->常规->VC++目录->包含文件添加$(HALCONROOT)\\include;和$(HALCONROOT)\\include\cpp
HALCON源文件导出(文件->导出)
在HDevelop中编写好的程序在导出时,Halcon会帮我们转换成我们需要的语言,比如C++。例:HDevelop中有如下语句需要导出:
dev_close_window()
Halcon导出成C++语言就成了如下语句:
if (HDevWindowStack::IsOpen()) //判断窗口是否打开
close_window(HDevWindowStack::Pop()); //打开了就销毁
static void Push(const HTuple &win_handle);此方法就是将此句柄下发给halcon
static HTuple GetActive(); 此方法就是从halcon的句柄队列中获取一个处于激活状态的窗口句柄,用于绘图操作,比如显示图像:read_image(),再调disp_obj(),当然参数是这里获取的窗口句柄
static void SetActive(const HTuple &win_handle); 功如其名,就是将某一个句柄所指的窗口处于激活状态
static bool IsOpen(); 判断某一窗口是否打开,文章开头有使用,如果打开了,则关闭
static void CloseAll(); 关闭所有窗口,遍历底层的句柄队列,一一关闭并销毁
展开阅读全文