序列号读取

1.序列号读取

1.1 应用示例目的与思路

  1. 获取光盘的外接圆;
  2. 然后进行极坐标变换,获取字符所在的区域;
  3. 最后进行字符分割、识别及其在原图上显示。

1.2 应用示例相关算子介绍

(1) mean_image(Image : ImageMean : MaskWidth, MaskHeight : )

功能:对输入图像进行均值滤波(线性平滑)

图形输入参数:Image:输入图像;

图形输出参数:ImageMean:均值滤波后的图像;

控制输入参数:( MaskWidth, MaskHeight):滤波器的大小(宽高)。

(2) dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : )

功能:从输入图像中选择像素满足阈值条件的那些区域(使用局部阈值分割图像)。

图形输入参数1:OrigImage:输入图像;

图形输入参数2:ThresholdImage:包含局部阈值的图像阈值图像是原始图像的平滑版本(例如,通过应用mean_image、binomial_filter、gauss_filter等);

图形输出参数:RegionDynThresh:分割后的区域;

控制输入参数1:Offset:应用于ThresholdImage图像的偏移,选择的“偏移”越大,提取的区域就越小;

控制输入参数2:LightDark:提取的模式(明亮、黑暗和相似),List of values: 'dark', 'equal', 'light', 'not_equal'。

(3) fill_up(Region : RegionFillUp : : )

功能:填充区域中的孔洞。

图形输入参数:Region:包含孔洞的输入区域;

图形输出参数:RegionFillUp:无孔洞的输出区域。

(4) gen_contour_region_xld(Regions : Contours : Mode : )

功能:从区域中根据Mode生成相应的xld轮廓。

图形输入参数:Regions:输入的区域;

图形输出参数:Contours:输出的轮廓;

控制输入参数:Mode:生成轮廓的模式,List of values: 'border', 'border_holes', 'center'。'border':边界像素的外部边界用作轮廓点;'border_holes':除了输入区域的外部边界之外,还可以获得所有孔洞的轮廓;'center':边界像素的中心被用作轮廓点。

(5)fit_circle_contour_xld(Contours : : Algorithm, MaxNumPoints, MaxClosureDist, ClippingEndPoints, Iterations, ClippingFactor : Row, Column, Radius, StartPhi, EndPhi, PointOrder)

功能:通过圆近似XLD轮廓(拟合圆)

图形输入参数:Contours:输入的轮廓;

控制输入参数1:Algorithm:用于拟合圆的算法,可选的参数有:

'algebraic' (“代数”方法使轮廓点和生成的圆之间的代数距离最小化);

'ahuber'(类似于“代数”方法,根据Huber的方法对轮廓点进行加权,以减少异常值的影响);

'atukey'(类似于“代数”方法,根据Tukey的方法对轮廓点进行加权,并忽略异常值);

'geometric'(“几何”方法使轮廓点和生成的圆之间的几何距离最小化);

'geohuber'(类似于“几何”方法,根据Huber的方法对轮廓点进行加权,以减少异常值的影响);

'geotukey'(类似于“几何”方法,根据Tukey的方法对轮廓点进行加权,并忽略异常值);

控制输入参数2:MaxNumPoints:用于计算的最大轮廓点数(所有点为-1),Default value: -1;

控制输入参数3:MaxClosureDist:轮廓端点之间的最大距离视为“闭合”,Default value: 0.0;

控制输入参数4:ClippingEndPoints:拟合要忽略的等高线起点和终点的点数,Default value: 0;

控制输入参数5:Iterations:指定算法“algebraic”、“ahuber”和“atukey”的迭代次数,Default value: 3;

控制输入参数6:ClippingFactor:用于消除异常值的剪裁因子(典型值:Huber为1.0,Tukey为2.0),Default value: 2.0;

控制输出参数1:(Row, Column):拟合圆的中心坐标;

控制输出参数2:Radius:拟合圆半径;

控制输出参数3:(StartPhi, EndPhi):拟合圆的起始和终止角度;

控制输出参数4:PointOrder:沿着边界点的顺序。

(6) polar_trans_image_ext(Image : PolarTransImage : Row, Column, AngleStart, AngleEnd, RadiusStart, RadiusEnd, Width, Height, Interpolation : )

功能:将图像中的环形弧转换极坐标系下为Width x Height的方形图像。

图形输入参数:Image:输入图像;

图形输出参数:PolarTransImage:输出图像;

控制输入参数1:(Row, Column):输入图像中环形弧中心的行列坐标;

控制输入参数2:(AngleStart, AngleEnd):输入图像中环形弧的起始和终止角度;

控制输入参数3:( RadiusStart, RadiusEnd):输入图像中环形弧的起始和终止半径;

控制输入参数4:(Width, Height):输出图像的宽和高;

控制输入参数5:Interpolation:变换中使用的插值方法。

(7) polar_trans_region_inv(PolarRegion : XYTransRegion : Row, Column, AngleStart, AngleEnd, RadiusStart, RadiusEnd, WidthIn, HeightIn, Width, Height, Interpolation : )

功能:将极坐标中的区域变换回笛卡尔坐标系下的环形区域。

图形输入参数:PolarRegion:输入区域;

图形输出参数:XYTransRegion:输出区域;

控制输入参数1:(Row, Column):输出区域中环形弧中心的行列坐标;

控制输入参数2:(AngleStart, AngleEnd):输出区域中环形弧的起始和终止角度;

控制输入参数3:( RadiusStart, RadiusEnd):输出区域中环形弧的起始和终止半径;

控制输入参数4:(WidthIn, HeightIn):变换区域XYTransRegion的虚拟输入图像尺寸;

控制输入参数4:(Width, Height):变换区域XYTransRegion的虚拟输出图像尺寸;

控制输入参数5:Interpolation:变换中使用的插值方法。

(8) connection(Region : ConnectedRegions : : )

功能:计算输入区域的连接组件(连通区域)。

图形输入参数:Region:输入区域;

图形输出参数:ConnectedRegions:输出的连通区域;

(9) sort_region(Regions : SortedRegions : SortMode, Order, RowOrCol : )

功能:根据区域的相对位置对区域进行排序。

图形输入参数:Regions:输入区域;

图形输出参数:SortedRegions:排完序的输出区域;

控制输入参数1:SortMode:排序的种类;

控制输入参数2:Order:升序排列或降序排列;

控制输入参数3:RowOrCol:按行或按列进行排序。

(10) read_ocr_class_mlp( : : FileName : OCRHandle)

功能:从文件中读取OCR分类器模型。

控制输入参数:FileName:文件路径+文件名;

控制输出参数:OCRHandl:OCR分类器句柄。

(11) do_ocr_multi_class_mlp(Character, Image : : OCRHandle : Class, Confidence)

功能:使用OCR分类器对多个字符进行分类。

使用OCR分类器对多个字符进行分类。

图形输入参数1:Character:待识别的字符区域;

图形输入参数2:Image:待识别字符的灰度图像;

控制输入参数:OCRHandle:OCR分类器句柄;

控制输出参数1:Class:字符的分类结果;

控制输出参数2:Confidence:字符类别的置信度。

1.3 应用示例示例代码

*读取图片
read_image (CD_Image, './cd_print.png')
*获取图像的宽高
get_image_size (CD_Image, Width, Height)
*均值滤波
mean_image (CD_Image, ImageMean, 51, 51)
*动态阈值分割
dyn_threshold (CD_Image, ImageMean, RegionDynThresh, 15, 'dark')
*填充孔洞
fill_up (RegionDynThresh, RegionFillUp)
*获取区域圆的外轮廓
gen_contour_region_xld (RegionFillUp, ContourBorder, 'border')
*获取拟合圆的圆心和半径
fit_circle_contour_xld (ContourBorder, 'algebraic', -1, 0, 0, 3, 2, CenterRow, CenterColumn, Radius, StartPhi, EndPhi, PointOrder)
*环面的内径与外边界半径之比
AnnulusInner:=0.90
*环面的外径与外边界半径之比
AnnulusOuter:=0.99
*圆周率Pi
Pi := acos(0.0) * 2
*待变换图像的宽度
WithPolar:= 2*Pi*Radius*AnnulusInner
*待变换图像的高度
HeightPolar:= Radius*(AnnulusOuter-AnnulusInner)
RadiusStart:= Radius*AnnulusOuter
RadiusEnd:= Radius*AnnulusInner
AngleStart:= 2*Pi-2*Pi/WithPolar
AngleEnd:= 0
*极坐标变换
polar_trans_image_ext (CD_Image, PolarTransImage, CenterRow, CenterColumn, AngleStart, AngleEnd, RadiusStart, RadiusEnd, WithPolar, HeightPolar, 'bilinear')
*字符宽度与WithPolar之比
CharWidthFraction:=0.01
*字符宽度
CharWidth:=WithPolar*CharWidthFraction
*字符高度
CharHeight:=CharWidth
*均值滤波
mean_image (PolarTransImage, ImageMean1, 2*CharWidth, 2*CharHeight)
*动态阈值分割
dyn_threshold (PolarTransImage, ImageMean1, RegionDynThresh1, 10, 'dark')
*连通区域分析
connection (RegionDynThresh1, ConnectedRegions)
*区域筛选
select_shape (ConnectedRegions, RegionChar, ['height','width','row'], 'and', [CharHeight*0.1,CharWidth*0.3,HeightPolar*0.25], [CharHeight*1.1,CharWidth*1.1,HeightPolar*0.75])
*区域分类
sort_region (RegionChar, RegionCharSort, 'character', 'true', 'row')
read_ocr_class_mlp ('./Industrial_Rej.omc', OCRHandle)
do_ocr_multi_class_mlp (RegionCharSort, PolarTransImage, OCRHandle, Class,Confidence)
SNString:=sum(Class)
polar_trans_region_inv (RegionCharSort, XYTransRegion, CenterRow, CenterColumn, AngleStart, AngleEnd, RadiusStart, RadiusEnd, WithPolar, HeightPolar,Width,Height, 'nearest_neighbor')
dev_close_window ()
dev_open_window (0, 0, Width,Height, 'black', WindowID)
set_display_font (WindowID, 16, 'mono', 'true', 'false')
dev_display (CD_Image)
dev_display (XYTransRegion)
disp_message (WindowID, SNString, 'image', 80, 80, 'green', 'false')

结果展示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/73817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

19 | spark 统计 每列的数据非缺失值

计算CSV文件中每列的数据覆盖率(非缺失值的百分比)时,您可以使用提供的Java代码来完成这项任务。以下是更详细的步骤: 1. 导入所需库和设置Spark配置 首先,您需要导入所需的Java库,并设置Spark的配置。这些库包括Apache Spark的Java库以及用于数据处理和格式化的其他Ja…

SQL语法

通用语法及分类 DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)DML: 数据操作语言,用来对数据库表中的数据进行增删改DQL: 数据查询语言,用来查询数据库中表的记录DCL: 数据控制语言,用来创建数…

uniapp 手机 真机测试 ​ 云打包 要是没申请 可以使用云打包 然后采用 测试权限即可​

uniapp 手机 真机测试 打开手机 找到手机的 版本号 点击 知道提示 (启动开发者模式) 然后 在进行usb的连接打开 运行uniapp 到手机基台 手机确认 即可 四, 云打包 要是没申请 可以使用云打包 然后采用 测试权限即可

每日刷题|回溯法解决全排列问题第二弹之解决字符串、字母大小排列问题

食用指南:本文为作者刷题中认为有必要记录的题目 前置知识:回溯法经典问题之全排列 ♈️今日夜电波:带我去找夜生活—告五人 0:49 ━━━━━━️💟──────── 4:59 …

2023国赛数学建模C题思路代码 - 蔬菜类商品的自动定价与补货决策

# 1 赛题 在生鲜商超中,一般蔬菜类商品的保鲜期都比较短,且品相随销售时间的增加而变差, 大部分品种如当日未售出,隔日就无法再售。因此, 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬菜…

Vue3笔记

setup Vue3.0中一个新的配置项,值为一个函数。组件中所用到的:数据、方法等等,均要配置在setup中。setup函数的两种返回值: 若返回一个对象,则对象中的属性、方法,在模板中均可以直接使用。(重…

QUIC协议科普导入(一)

一:QUIC协议导入 QUIC是一个通用的传输层网络协议,最初由Google的Jim Roskind设计,2012年实现并部署,2013年随着实验范围的扩大而公开发布,并向IETF描述。虽然长期处于互联网草案阶段,但在从Chrome浏览器到…

软件层面缓存基本概念与分类

缓存 缓存基本概念(百度百科) 缓存(cache),原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快…

vue3中通过ref获取子组件实例,取值为undefined

也就是Vue3如何通过 ref 获取子组件实例(子组件中的DOM结构、数据、及方法),今天写index.vue(父组件)时想获取子组件的数据和方法,通过给子组件绑定ref,打印子组件的数据为undefined;百度搜索常用方法为: …

【C++】继承基础知识一遍过

目录 一,概念 二,继承定义 1. 继承格式 2. 访问限定符与继承方式的关系 3. 继承父类成员访问方式的变化 小结: 三. 父类与子类对象赋值转化 四,继承作用域 1.特点 2. 测试题 五,派生类不一样的默认成员函…

基于深度学习的三维重建从入门实战教程 原理讲解 源码解析 实操教程课件下载

传统的重建方法是使用光度一致性等来计算稠密的三维信息。虽然这些方法在理想的Lambertian场景下,精度已经很高。 但传统的局限性,例如弱纹理,高反光和重复纹理等,使得重建困难或重建的结果不完整。 基于学习的方法可以引入比如镜面先验和反射先验等全局语义信息,使匹配…

Ribbon负载均衡+Nacos服务搭建

Ribbon负载均衡 流程 首先通过RibbonLoadBalanceerClient获取服务名,并传给DynamicServerListLoadBalancer——>通过EureKa-server获取服务名对应服务列表(也就是被注册到EureKa中的服务,可能包括不同端口的),然后我们会根据IRule中的服务…

【python自动化】playwright长截图切换标签页JS注入实战

前言 当前教程使用的playwright版本为1.37.0,selenium版本为3.141.0 官方文档:https://playwright.dev/python/docs/screenshots 本教程目录如下 文章目录 前言playwright各类截图源码阅读ElementHandle类下的截图Page类下的截图Locator类下的截图 Playwright快速…

官方项目《内容示例》中Common UI部分笔记:Common UI 分场景使用教程

文章目录 前言0. 通用设置0.1 开启插件0.2 设置Viewport 1. 分场景教程1. 1 在仅使用鼠标控制的场景下Common Activatable StackCommon Activatable Widget 1.2 当焦点落到一个按钮时显示默认确认(Click/Accept)按键图标Common Input Action DataBaseInp…

【Mysql】数据库第二讲(数据库中数据类型的介绍)

数据类型 1.数据类型分类2.数值类型介绍2.1tinyint类型2.2bit类型介绍2.3小数类型介绍2.3.1 float2.3.2decimal 3.字符串类型介绍3.1char3.2varchar面试:char和varchar的区别 4.日期和时间类型5.enum和set 1.数据类型分类 2.数值类型介绍 2.1tinyint类型 数值越界测…

项目(智慧教室)第三部分,人机交互在stm32上的实现

一。使用软件 1.stm32cubemx中针对汉字提供的软件 2.对数据进行处理 2.上面点击ok--》这里选择确定 3.这里选择保存即可由字符库,但是需要占用内存太大,需35M,但是stm32只有几百k,所以需要自己删减。 生成中文字符(用…

用Google CDC来同步Cloud SQL的数据到Bigquery

在Google的云平台中,我创建了一个Cloud SQL的Postgresql实例,在上面保存了一些业务数据。现在需要定期把这些数据同步到Bigquery数据仓库中,这样我们就能在Bigquery上进行数据的后续分析处理,生成数据报表。 Google提供了一个Dat…

QTday3(QT实现文件对话框保存操作、实现键盘触发事件【WASD控制小球的移动】)

1.实现文件对话框保存操作 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }void Widget::on_fontBtn_clicked() {//调用QFo…

More Effective C++学习笔记(6)

目录 条款32:在未来时态下发展程序条款33:将非尾端类设计为抽象类条款34:如何在同一个程序中结合C和C条款35:让自己习惯于标准的C语言 条款32:在未来时态下发展程序 “事情总是会改变”是一个事实,因此我们…

dll文件反编译源代码 C#反编译 dotpeek反编译dll文件后export

目录 背景下载安装dotpeek导入dll文件export导出文件参考 背景 项目合作的时候,使用前人的或者其他部门dll文件直接在机台运行,会出现很多问题,逻辑,效率等等,此时我们可以选择对他们的代码进行反编译和重构&#xff…