【Emgu CV教程】5.6、几何变换之LinearPolar()极坐标变换

LinearPolar()线性极坐标转换函数用于将图像从笛卡尔坐标系转换为极坐标系,太难懂了,还是简单的说吧

笛卡尔坐标系就是平面直角坐标系,用X轴、Y轴表示的图像,最常用的表示方式,比如灰度图Point(360,100) = 230,就表示第360列,第100行的那个点数值是230。

极坐标系呢?下面这个说明来自百度百科:

极坐标,属于二维坐标系统,创始人是牛顿,主要应用于数学领域。极坐标是指在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向)。对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r表示),θ表示从Ox到OM的角度,ρ叫做点M的极径,θ叫做点M的极角,有序数对 (ρ,θ)就叫点M的极坐标,这样建立的坐标系叫做极坐标系。通常情况下,M的极径坐标单位为1(长度单位),极角坐标单位为rad(或°)。

是不是还是不知道LinearPolar()函数能干什么,别着急,先看一下它的定义:

public static void LinearPolar(
	IInputArray src,  // 输入图像
	IOutputArray dst, // 输出图像
	PointF center, // 极坐标变换中心,一般就是图像的中心
	double maxRadius, // 极坐标变换的最大距离
	Inter interpolationType = Inter.Linear, // 插值算法
	Warp warpType = Warp.FillOutliers //与interpolationType 配合使用
)

印章、奖牌、徽章这种圆形物体上面的文字排列有个特点,并不是按照我们日常的习惯是横平竖直排列的,而是按照圆形周长分布排列,比如下面这个印章,一般的OCR识别模型可以很简单的提取出里面的文字,但是文字不是按照我们正常语义组合的,而是一个一个独立的汉字。如果要想提取出连贯的文字“联合国联合国教科文组织不正常人类研究中心”,就要把圆形布局的图片,转成横平竖直布局,这时候就可以用LinearPolar()函数了,以这张378*378的印章为例。
在这里插入图片描述

使用以下代码:

Mat tempMat = srcMat.Clone();
Mat dstMat = new Mat(); // 原始图像转换成的极坐标图像
Mat dstRotate90 = new Mat(); // dstMat逆时针旋转90°
Mat dstTnverted = new Mat(); // dstMat再翻转回去,又得到原始图像
PointF center = new PointF(tempMat.Cols / 2, tempMat.Rows / 2); // 图像的中心
double maxRadius = 189; // 图像尺寸的一半
CvInvoke.LinearPolar(tempMat, dstMat, center, maxRadius, Inter.Linear, Warp.FillOutliers);
CvInvoke.Rotate(dstMat, dstRotate90, RotateFlags.Rotate90CounterClockwise);
CvInvoke.LinearPolar(dstMat, dstTnverted, center, maxRadius, Inter.Linear, Warp.InverseMap);
CvInvoke.Imshow("LinearPolar image, " + dstMat.Size.ToString(), dstMat);
CvInvoke.Imshow("LinearPolar image rotate 90 , " + dstRotate90.Size.ToString(), dstRotate90);
CvInvoke.Imshow("LinearPolar image inverted, " + dstTnverted.Size.ToString(), dstTnverted);

依次得到极坐标转换后的图片dstMat,dstMat逆时针旋转90度的图片dstRotate90,dstMat极坐标逆转换回来的图片dstTnverted,三张图如下:
在这里插入图片描述
中间那幅图,是不是"联合国教科文组织不正常人类研究" 和 “中心” 基本变成水平方向排列的连贯文字了,这样是不是可以大大提高OCR识别效果。

提示:使用完LinearPolar()函数后,一定要再将图像逆时针旋转90度,才能得到我们正常习惯的图片。

原创不易,请勿抄袭。共同进步,相互学习。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构与算法教程,数据结构C语言版教程!(第五部分、数组和广义表详解)四

第五部分、数组和广义表详解 数组和广义表,都用于存储逻辑关系为“一对一”的数据。 数组存储结构,99% 的编程语言都包含的存储结构,用于存储不可再分的单一数据;而广义表不同,它还可以存储子广义表。 本章重点从矩阵…

【工具使用】Keil5软件使用-基础使用篇

一、概述 本文面向未接触过Keil的新手,如果是职场老手可跳过此篇。为了快速上手,本文会跳过很多细节及解释,如需要了解原理,请移步进阶篇。 二、 软件介绍 Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调…

【Git不走弯路】(二)提交与分支的本质

1. 前言 提交与分支是Git中两个基本对象,对初学者而言需要花些时间理解。正如我们之前所说,计算机中很多新概念是新瓶装旧酒。计算机技术来源于需求,服务于需求,需求是计算机技术的出发点和落脚点。梳理清楚工程实践中&#xff0…

【开源】基于JAVA的停车场收费系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 停车位模块2.2 车辆模块2.3 停车收费模块2.4 IC卡模块2.5 IC卡挂失模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 停车场表3.2.2 车辆表3.2.3 停车收费表3.2.4 IC 卡表3.2.5 IC 卡挂失表 四、系统实现五、核心代码…

2023.1.21 关于 Redis 主从复制详解

目录 引言 单点问题 分布式系统 ​​​​​​​​​​​​​​主从模式 配置 Redis 主从结构 断开主从关系 切换主从关系 补充知识点一 只读 网络延迟 拓扑结构 一主一从 一主多从 树形主从结构 主从复制的基本流程 数据同步 replicationid offset pzync 运…

transdata笔记:手机数据处理

1 mobile_stay_duration 每个停留点白天和夜间的持续时间 transbigdata.mobile_stay_duration(staydata, col[stime, etime], start_hour8, end_hour20) 1.1 主要参数 staydata停留数据(每一行是一条数据)col 列名,顺序为[‘starttime’,…

终极解决Flutter项目运行ios项目报错Without CocoaPods, plugins will not work on iOS or macOS.

前言 最近在开发Flutter项目,运行ios环境的时候报错没有CocoaPods,安卓环境可以正常运行,当时一脸懵逼,网上搜索了一下,有给我讲原理的,还有让我安装这插件那插件的,最终把电脑搞得卡死&#x…

代码随想录算法训练DAY25|回溯2

算法训练DAY25|回溯2 216.组合总和III 力扣题目链接 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。 说明: 所有数字都是正整数。 解集不能包含重复的组合。 示例 1: 输入: k 3, n …

Docker安装启动、常用命令、应用部署、迁移备份、Dockerfile、Docker私有仓库

目录 1.Docker安装与启动 1.1 安装Docker 1.2 设置ustc的镜像 1.3 Docker的启动与停止 2.常用命令 2.1 镜像相关命令 2.1.1 查看镜像 2.1.2 搜索镜像 2.1.3 拉取镜像 2.1.4 删除镜像 2.2 容器相关命令 2.2.1 查看容器 2.2.2 创建与启动容器 2.2.3 停止与启动容器 2.…

分享flask_socketio配置时遇到的一些问题

flask_socketio 1.前言 flask_socketio应用启动后,在控制台中,存在着flask_socketio这些烦人的log 一堆的get和post几秒一个让我什么都看不清,因此想要关掉log 结果没想到,找了很多办法半天去不掉flask_socketio的log 试过了…

互联网未来的 3 个愿景

互联网可能是现代技术最伟大的创造,而且它是一项正在进行中的工作。其持续发展的核心是对互联网未来发展的三种不同愿景。在本文中,我们将探讨指导互联网技术和架构未来的三个想法:Web 3.0、Web3 和语义 Web。 Web 3.0:互联网的未…

自然语言处理研究的内容

一.基础技术 1.1 词法分析 词法分析(Lexical Analysis),也称为词法扫描或扫描器,是自然语言处理(NLP)中的基础步骤之一,用于将输入的文本分割成词法单元(Token)。词法单…

Proxmox VE 8 试装Oracle 23c

作者:田逸(formyz) Oracle 当前的最新版本是23c,虽然官方网站下载不了它的正式版本,但是却提供了一个性能受限的免费版本“Oracle Database 23.3 Free”(存储容量受限、内存使用受限)。这里就只…

【llm 使用llama 小案例】

huggingfacehttps://huggingface.co/meta-llama from transformers import AutoTokenizer, LlamaForCausalLMPATH_TO_CONVERTED_WEIGHTS PATH_TO_CONVERTED_TOKENIZER # 一般和模型地址一样model LlamaForCausalLM.from_pretrained(PATH_TO_CONVERTED_WEIGHTS) tokenize…

CGLIB动态代理(AOP原理)(面试重点)

推荐先看JDK 动态代理(Spring AOP 的原理)(面试重点) JDK 动态代理与 CGLIB 动态代理的区别 JDK 动态代理有⼀个最致命的问题是其只能代理实现了接⼝的类. 有些场景下,我们的业务代码是直接实现的,并没有接⼝定义.为了解决这个问…

一.初识Linux 1-3操作系统概述Linux初识虚拟机介绍

目录 一.初识Linux 1.操作系统概述 计算机组成 硬件: 软件: 操作系统: 操作系统工作流程 操作系统作用 常见的操作系统 PC端: 移动端:(掌上操作系统) 一.初识Linux 2.Linux初识 linu…

HTML 入门手册(一)

目录 HTML 1-基础语法 单标签 双标签 整体结构 2-标题和水平线 标题 水平线 3-段落和换行 段落 换行 4-列表 无序列表 有序列表 嵌套列表 5-div和span div span 6-格式化标签 粗体 斜体 下划线中划线 上标和下标 7-超链接(a标签) 链接到URL 链接到本…

php基础学习之代码框架

一&#xff0c;标记 脚本标记&#xff08;已弃用&#xff09;&#xff1a;<script language"php"> php代码 </script> 标准标记&#xff1a;<?php php代码 ?> 二&#xff0c;基础输出语句 不是函数&#xff0c;…

nginx基于IP的多虚拟主机

结合这篇文章一起&#xff1a;nginx虚拟主机-CSDN博客文章浏览阅读63次。虚拟主机指的就是一个独立的站点配置&#xff0c;是nginx默认支持的一个功能&#xff0c;它能够有自己独立的域名&#xff0c;独立的ip&#xff0c;独立的端口配置&#xff0c;能够配置完整的www服务&…

SpringSecurity+OAuth2.0 搭建认证中心和资源服务中心

目录 1. OAuth2.0 简介 2. 代码搭建 2.1 认证中心&#xff08;8080端口&#xff09; 2.2 资源服务中心&#xff08;8081端口&#xff09; 3. 测试结果 1. OAuth2.0 简介 OAuth 2.0&#xff08;开放授权 2.0&#xff09;是一个开放标准&#xff0c;用于授权第三方应用程序…