機器視覺Halcon檢測動態想要的特征區域識別字符

2023-10-10 21:40

本文主要是介绍機器視覺Halcon檢測動態想要的特征區域識別字符,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

光學字符識別是机器视觉领域非常重要的一个应用。机器视觉是集光学、机电和计算机三个领域的一门不算新的技术。此例子用的CNN神經網絡算子識別,調用的訓練庫是系統HDevelop自帶的
識別的圖片為電錶的屏幕截圖,用於提取電錶中間的一大串數字
要識別的圖片:
在这里插入图片描述

識別過程
1、閾值處理
mean_image(Image,Mean,15,15)
dyn_threshold(Image,Mean,Region,5,‘dark’)
dev_display (Region)
圖片效果:
在这里插入图片描述
2、執行代碼:
*連接字符
closing_rectangle1 (Region, RegionClosing1, 1, 5)
在这里插入图片描述

3、裁剪不要的,將不要的其他區域剪小
opening_circle (RegionClosing1, GuoRegion,2.2)
在这里插入图片描述

4、 *篩選區域
在調用select_shape 之前必須要調用連通區域方法connection 才有效果,切記
*计算区域的连通组件
connection (GuoRegion, ConnPatterns)
在这里插入图片描述

5、篩選區域
select_shape (ConnPatterns, shapeRegion, ‘area’, ‘and’, 260, 99999)
在这里插入图片描述
6、去掉頭頂的紅杠
*去掉圖片頭頂的紅色橫杠
select_shape (shapeRegion, shapeRegion2, ‘width’, ‘and’, 10, 100)
在这里插入图片描述

7、求交集,與第一步處理后的區域求交集
*求交集 以區分的顏色模塊在前,原字符再后,才能單獨著色交集后的單體字符
intersection (shapeRegion2, Region, RegionIntersection)
dev_display(RegionIntersection)
在这里插入图片描述

8、最後用cnn卷積神經網絡識別
*排序
sort_region (RegionIntersection, SortedRegions, ‘character’, ‘true’, ‘row’)

dev_set_draw (‘margin’)
dev_set_shape (‘rectangle1’)
dev_display (SortedRegions)

shape_trans (SortedRegions, RegionTrans, ‘rectangle1’)
area_center (RegionTrans, Area, Row, Column)
MeanRow := mean(Row)
FontName := ‘Universal_Rej’
count_obj (SortedRegions, Number)
read_ocr_class_cnn (FontName, OCRHandle)
for I := 1 to Number by 1
select_obj (SortedRegions, ObjectSelected, I)
do_ocr_single_class_cnn (ObjectSelected, Image, OCRHandle, 1, Class, Confidence)
dev_disp_text (Class, ‘image’, MeanRow+30, Column[I - 1]-5, ‘green’, ‘box’, ‘false’)
endfor

識別結果:
在这里插入图片描述

Halcon HDevelop完整代碼:

dev_update_off()
read_image(Image,'d:/Desktop/vision/DBIAO01.png')
get_image_size(Image,Width,Height)dev_close_window ()
dev_open_window (0, 0, Width*2, Height*2, 'black', WindowHandle)
set_display_font (WindowHandle, 30, 'mono', 'true', 'false')
dev_display (Image)dev_set_line_width (2)mean_image(Image,Mean,15,15)
dyn_threshold(Image,Mean,Region,5,'dark')
dev_display (Region)*clip_region (Region, RawSegmentation, 74.8873, 58.6812, 132.943, 312.194) 
*select_shape (Region, SelectedRegions, 'height', 'and',170,99999)
*gen_rectangle1 (ROI_0, 73.2924, 55.8125, 135.814, 312.938)*連接字符,以9度閉合畫圓圈
*closing_circle (CharCandidates, RegionClosing1, 1.5)
closing_rectangle1 (Region, RegionClosing1, 1, 5)
*去除不要的
opening_circle (RegionClosing1, GuoRegion,2.2)*  fill_up (RegionClosing1, Solid)
* opening_rectangle1 (Solid, Cut, 5, 2)*计算区域的连通组件connection (GuoRegion, ConnPatterns)*篩選區域select_shape (ConnPatterns, shapeRegion, 'area', 'and', 260, 99999)*去掉圖片頭頂的紅色橫杠select_shape (shapeRegion, shapeRegion2, 'width', 'and', 10, 100)*求交集 以區分的顏色模塊在前,原字符再后,才能單獨著色交集后的單體字符
intersection (shapeRegion2, Region, RegionIntersection) 
dev_display(RegionIntersection)*排序
sort_region (RegionIntersection, SortedRegions, 'character', 'true', 'row') dev_set_draw ('margin')
dev_set_shape ('rectangle1')
dev_display (SortedRegions)shape_trans (SortedRegions, RegionTrans, 'rectangle1')
area_center (RegionTrans, Area, Row, Column)
MeanRow := mean(Row)
FontName := 'Universal_Rej'
count_obj (SortedRegions, Number)
read_ocr_class_cnn (FontName, OCRHandle)
for I := 1 to Number by 1select_obj (SortedRegions, ObjectSelected, I)do_ocr_single_class_cnn (ObjectSelected, Image, OCRHandle, 1, Class, Confidence)dev_disp_text (Class, 'image', MeanRow+30, Column[I - 1]-5, 'green', 'box', 'false')
endfor

这篇关于機器視覺Halcon檢測動態想要的特征區域識別字符的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/183269

相关文章

HTML5 中的<button>标签用法和特征

《HTML5中的<button>标签用法和特征》在HTML5中,button标签用于定义一个可点击的按钮,它是创建交互式网页的重要元素之一,本文将深入解析HTML5中的button标签,详细介绍其属... 目录引言<button> 标签的基本用法<button> 标签的属性typevaluedisabled

C#如何去掉文件夹或文件名非法字符

《C#如何去掉文件夹或文件名非法字符》:本文主要介绍C#如何去掉文件夹或文件名非法字符的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#去掉文件夹或文件名非法字符net类库提供了非法字符的数组这里还有个小窍门总结C#去掉文件夹或文件名非法字符实现有输入字

idea报错java: 非法字符: ‘\ufeff‘的解决步骤以及说明

《idea报错java:非法字符:‘ufeff‘的解决步骤以及说明》:本文主要介绍idea报错java:非法字符:ufeff的解决步骤以及说明,文章详细解释了为什么在Java中会出现uf... 目录BOM是什么?1. BOM的作用2. 为什么会出现 \ufeff 错误?3. 如何解决 \ufeff 问题?最

使用Java编写一个字符脱敏工具类

《使用Java编写一个字符脱敏工具类》这篇文章主要为大家详细介绍了如何使用Java编写一个字符脱敏工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、字符脱敏工具类2、测试工具类3、测试结果1、字符脱敏工具类import lombok.extern.slf4j.Slf4j

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

C# string转unicode字符的实现

《C#string转unicode字符的实现》本文主要介绍了C#string转unicode字符的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录1. 获取字符串中每个字符的 Unicode 值示例代码:输出:2. 将 Unicode 值格式化

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将