halcon例程 -- 逐字细究(六)


* bottle.hdev: Segment and read numbers on a beer bottle

* Step 0: Preparations
* Specify the name of the font to use for reading the date on the bottle.
* It is easiest to use the pre-trained font Industrial_0-9.  If you have run the
* program bottlet.hdev in this directory, you can activate the second line
* to use the font trained with this program.
FontName := 'Industrial_0-9'
* FontName := 'bottle'

* Step 1: Segmentation
dev_update_window ('off')
*更新图像窗口
read_image (Bottle, 'bottle2')
*读取图像
get_image_size (Bottle, Width, Height)
*获取图像的尺寸
dev_close_window ()
*关闭当前活动的窗体
dev_open_window (0, 0, 2 * Width, 2 * Height, 'black', WindowID)
*以指定的尺寸打开窗体,背景色为黑色
set_display_font (WindowID, 20, 'mono', 'true', 'false')
*设置显示字体格式
dev_display (Bottle)
*显示图像
disp_continue_message (WindowID, 'black', 'true')
*显示提示信息
stop ()
*程序运行终止
threshold (Bottle, RawSegmentation, 0, 95)
**利用全局阈值(中间分解线)分割图像,采用灰度区间g实现图像的全局分割,g的取值范围:[MinGray,MaxGray]
*Image 输入图像
*Region 输出分割后的区域名称
*MinGray 灰度值下限
*MaxGray 灰度值上限
*注:具体参数,可以通过操作灰度直方图来调控,自动生成代码
fill_up_shape (RawSegmentation, RemovedNoise, 'area', 1, 5)
**填充区域中含有某种特征的孔或缝隙进行填充,形成新的完成区域
*Region 输入需要填充孔(洞或裂缝)的区域
*RegionFillUp 输出填充后的区域
*Feature 输入填充特征,默认:'area'
*Min 输入该特征的最小值,默认: 1
*Max 输入该特征的最大值,默认: 100
opening_circle (RemovedNoise, ThickStructures, 2.5)
**打开一个图形结构基础的一个区域
*Region 输入一个需要被提取圆形成分的区域 
*RegionOpening 输出被提取圆形成分的区域
*Radius 输入圆形成分的半径
dev_display (Bottle)
*显示图像
dev_set_color ('green')
*显示轮廓的颜色
dev_display (ThickStructures)
*显示图像
disp_continue_message (WindowID, 'black', 'true')
*显示提示信息
stop ()
*程度运行终止
dev_set_draw ('margin')
*设置填充模式
dev_set_line_width (3)
*设置区域轮廓的线宽
dev_display (Bottle)
*显示图像
dev_display (ThickStructures)
*显示图像
disp_continue_message (WindowID, 'black', 'true')
*显示提示信息
stop ()
*程度运行终止
fill_up (ThickStructures, Solid)
**填充区域中的孔或裂缝等,将输入区域的孔,缝隙进行填充,形成新的完成区域
*Region 输入含孔(缝隙)的区域
*RegionFillUp 输出一个布满缝隙及孔的区域
dev_display (Bottle)
*显示图像
dev_display (Solid)
*显示图像
disp_continue_message (WindowID, 'black', 'true')
*显示提示信息
stop ()
*程度运行终止
opening_rectangle1 (Solid, Cut, 1, 7)
**打开一个矩区域基础的区域
*Region 输入一个需要被提取的矩形成分的区域
*RegionOpening 输出一个提取了矩形成分的区域
*Width 输入矩形的宽度
*Height 输入矩形的高度
dev_display (Bottle)
*显示图像
dev_display (Cut)
*显示图像
disp_continue_message (WindowID, 'black', 'true')
*显示提示信息
stop ()
*程度运行终止
connection (Cut, ConnectedPatterns)
**分离一个区域中相连接的部分(变成多个区域)
*Region 输入一个区域
*ConnectedRegions 输出独立并相连接的区域(数组)
intersection (ConnectedPatterns, ThickStructures, NumberCandidates)
**计算两个区域的交集(相同部分),对比两个区域,将相同的部分形成一个新的区域
*Region1 输入能够产生交集的区域1
*Region2 输入能够产生交集的区域1
*RegionIntersection 输出前两者的交集区域
dev_set_colored (12)
*设置区域的颜色
dev_display (Bottle)
*显示图像
dev_display (NumberCandidates)
*显示图像
disp_continue_message (WindowID, 'black', 'true')
*显示提示信息
stop ()
*程度运行终止
select_shape (NumberCandidates, Numbers, 'area', 'and', 300, 9999)
**根据区域要求的特征提取适应的区域
*reRegions 输入需要测量的区域(数组)
*SelectedRegions 输出符合的区域(数组),不符合的区域不会出现在该数组内
*Features 输入要检测的特征
*Operation 特征的方式,默认:and 即全部特征,or 特征之一
*Min 输入该特征的最小值[0,99999]
*Max 输入该特征的最大值[0,99999] Max >= Min
sort_region (Numbers, FinalNumbers, 'first_point', 'true', 'column')
**根据相邻位置归类区域
*Regions 输入要分类的区域
*SortRegions 输出分类后的区域
*SortMode 分类的方式,默认 'first_point'
*Order 分类次序 默认 'true'
*RowOrCol 分类是否采用按行还是按列依次分类,默认 'row'
dev_set_color ('red')
*设置区域的颜色
dev_display (Bottle)
*显示图像
dev_display (Numbers)
*显示图像
dev_set_shape ('rectangle1')
*设置显示区域的形状
dev_set_color ('green')
**设置区域的颜色
dev_display (FinalNumbers)
*显示图像
dev_set_shape ('original')
*设置显示区域的形状
dev_set_line_width (1)
*设置区域的轮廓的线宽
dev_set_draw ('fill')
*设置填充的模式

* Step2: Reading
read_ocr_class_mlp (FontName, OCRHandle)
*从一个文件中读取OCR分类器模型句柄
*FileName 输入需要读取的文件名,文件后缀为.omc,.fnt
*OCRHandle 输出OCR_mlp分类器模型句柄
do_ocr_multi_class_mlp (FinalNumbers, Bottle, OCRHandle, RecNum, Confidence)
**对一组字符区域内容进行OCR_mlp模型识别,输出到Class中去
*Character 输入需要辩认的字符区域
*Image 输入需要辨认字符的灰度值图像
*OCRHandle 输入需要分类的OCR_mlp分类器句柄
*Class 输出MLP识别对应的结果,该值保存的值为识别出来的字母或数字及符号等(数组),Class == Character
*Confidence 输出对应的特征相似值 (数组),该值 <= 1 Confidence == Character
area_center (FinalNumbers, Area, Row, ColNum)
*得到一个区域的面积及它的中心坐标
set_display_font (WindowID, 27, 'mono', 'true', 'false')
*设置显示字体格式
for i := 0 to |RecNum| - 1 by 1
    disp_message (WindowID, RecNum[i], 'image', 80, ColNum[i] - 3, 'green', 'false')
    *按格式输出数据信息
endfor
clear_ocr_class_mlp (OCRHandle)
**清除指定的OCR分类器模型句柄,释放该分类器所占据的存储空间
dev_update_window ('on')
*更新图像窗口
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值