Android文字基线(Baseline)算法

引言

Baseline是文字绘制时所参照的基准线,只有先确定了Baseline的位置,我们才能准确的将文字绘制在我们想要的位置上。Baseline的概念在我们使用TextView等系统控件直接设置文字内容时是用不到的,但是如果我们想要在Canvas画布上面绘制文字时,Baseline的概念就必不可少了。
我们先了解一下Android中Canvas画布绘制文字的方法,如下图:
Android绘制文字方法参数.png

参数示意:

  • text,文字内容
  • x,文字从画布上开始绘制的x坐标(Canvas是一个原点在左上角的平面坐标系)
  • y,Baseline所在的y坐标,不少人已开始以为y是绘制文字区域的底部坐标,其实是不正确的,这是两个概念
  • paint,画笔,设置的文字的大小颜色等属性
    了解了文字绘制的方法,我们现在就了解一下这个参数y(Baseline)的计算方法。
Baseline的概念

我们先看一行文字各区域的分布示意图
文字区域示意图.png
从上图来看,Baseline不难理解,它就是E和h的下边界线。我们还可以得出一个结论,文字的高度=Descent+Ascent
然而,上面这个公式并不完全准确,我们再看一个图:

### Android 双目摄像头测距实现方法 #### 1. 准备工作 为了在Android平台上利用双目摄像头实现测距功能,开发者可以参考已有的开源项目来简化开发流程。已有项目源码已经配置好了OpenCV库,无需再次下载和配置[^2]。 #### 2. 原理概述 双目立体视觉原理基于视差计算物体距离。两个相机拍摄同一场景的不同视角图像,通过匹配算法找到对应像素点之间的差异(即视差),再根据三角测量法得出目标物到摄像机的距离。具体来说: - **获取左右两幅图像** - **特征提取与匹配**:常用SIFT/SURF等不变性特征描述子进行配准操作。 - **构建稠密 disparity map**:采用BM或SGM算法求解每一对同名像点间的水平位移量d(x,y),形成深度图。 - **转换为实际物理单位** #### 3. 关键代码片段展示 以下是部分核心逻辑示意代码: ```java // 加载预训练好的模型参数文件路径 String modelPath = "file:///android_asset/stereo_model.xml"; // 初始化StereoBM对象并设置参数 Ptr stereoMatcher = StereoBM.create(NumDisparities, BlockSize); // 对输入图片做灰度化处理 Mat grayL = new Mat(),grayR=new Mat(); cvtColor(imgLeft ,grayL,COLOR_BGR2GRAY); cvtColor(imgRight,grayR,COLOR_BGR2GRAY); // 执行立体匹配运算获得disparity map stereoMatcher.compute(grayL, grayR, dispMap); // 计算真实世界的Z坐标值(z=f*b/disp) double focalLength=...; // 焦距f int baseline=... ; // 摄像头基线b for(int y=0;y<dispMap.rows();y++){ for(int x=0;x<dispMap.cols();x++){ double z=(focalLength*baseline)/dispMap.get(y,x)[0]; System.out.println("Point("+x+","+y+")'s distance:"+z+"mm"); } } ``` 上述过程实现了基本的双目测距框架搭建,在此基础上可根据应用场景需求进一步优化性能指标如精度、速度等方面表现[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值