序列号读取

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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

QUIC协议科普导入(一)

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

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,所以需要自己删减。 生成中文字符(用…

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…

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

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

redisson分布式锁

RLock官网解释 基于Redis的Java分布式可重入锁对象,实现了锁接口。 如果获得锁的Redisson实例崩溃,那么这种锁可能永远挂起在获得状态。为了避免这种情况,Redisson维护了锁看门狗,它在锁持有者Redisson实例活着的时候延长锁过期时…

算法笔记:哈夫曼树、哈夫曼编码

1 字符的机内表示 2 前缀编码 字符只放在叶结点中字符编码可以有不同的长度由于字符只放在叶结点中,所以每个字符的编码都不可能是其他字符编码的前缀前缀编码可被惟一解码 3 哈夫曼树 哈夫曼树是一棵最小代价的二叉树,在这棵树上,所有的字…

SpotBugs(是FindBugs的继任者)安装、使用

SpotBugs介绍 SpotBugs和FindBugs的关系 SpotBugs是FindBugs的继任者,从SpotBugs停止的地方继续。 备注:FindBugs项目已经停止了,从2015年发布3.0.1版本以后再没有新的版本。 SpotBugs通过静态分析寻找java代码中的bug,通过发现…

lv3 嵌入式开发-9 linux TFTP服务器搭建及使用

目录 1 TFTP服务器的介绍 2 TFTP文件传输的特点 3 TFTP服务器的适用场景 4 配置介绍 4.1 配置步骤 4.2 使用 5 常见错误 1 TFTP服务器的介绍 TFTP(Trivial File Transfer Protocol)即简单文件传输协议 是TCP/IP协议族中的一个用来在客户机与服务器…

手机也可以搭建个人博客?安卓Termux+Hexo搭建属于你自己的博客网站【cpolar实现公网访问】

文章目录 前言 1.安装 Hexo2.安装cpolar3.远程访问4.固定公网地址 前言 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章,在几秒内,即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并结合…

mysql 安全加固

PS:之前在做安全测试的时候,报告mysql有安全漏洞,于是研究了下如何修复,于是记录下来分享给大家 1.1修改mysql 存放位置 修复 1.停服务 service mysqld stop2.迁位置 2.1 新建迁移目录 mkdir /home/database2.2 迁移数据文件…