- 博客(33)
- 收藏
- 关注
原创 学习 Android (二十二) 学习 OpenCV (七)
本文介绍了OpenCV中的模板匹配技术,包括其数学原理、6种匹配方法(TM_SQDIFF、TM_SQDIFF_NORMED等)及其适用场景。重点讲解了核心函数matchTemplate()的使用方法,并提供了在Android应用中的实现示例。模板匹配可广泛应用于工业检测、文档处理、游戏自动化等领域,通过比较源图像与模板图像的相似度来定位目标位置,其中归一化相关系数匹配(TM_CCOEFF_NORMED)是最常用的鲁棒方法。
2025-09-12 09:11:41
1209
原创 学习 Android (二十一) 学习 OpenCV (六)
本文介绍了OpenCV中的霍夫直线检测技术,包括其基本原理、核心函数和应用场景。主要内容为: 霍夫变换原理:通过将图像空间中的直线转换到参数空间(ρ,θ)进行检测,利用投票机制识别直线。 两种实现方法: 标准霍夫变换(HoughLines):输出直线参数(ρ,θ),计算量大但更精确 概率霍夫变换(HoughLinesP):输出线段端点(x1,y1,x2,y2),计算效率高且更直观 应用领域包括文档扫描、车道检测、工业测量等。文中还提供了Android平台上的实现示例代码,展示了如何调用OpenCV Java
2025-09-09 16:18:13
695
原创 学习 Android (二十) 学习 OpenCV (五)
本文介绍了OpenCV中的图像腐蚀操作,重点讲解了腐蚀的数学定义、操作流程及不同结构元素的应用。腐蚀是通过结构元素扫描图像,使前景对象收缩的形态学操作。文章详细分析了二值和灰度图像的腐蚀过程,并提供了矩形、椭圆形和十字形三种结构元素的选择。代码分析部分展示了腐蚀核心函数的使用方法及参数说明,包括结构元素创建和迭代次数的影响。实际应用场景包括去除噪声、分离相连物体、文本处理和医学图像分析等。最后通过示例代码演示了不同类型结构元素的腐蚀效果实现。
2025-09-05 14:07:37
1276
原创 学习 Android (十九) 学习 OpenCV (四)
本文摘要: 本文介绍了OpenCV中的边缘检测技术,重点讲解了基于卷积核的基础边缘检测原理。文章首先解释了边缘检测的概念,即识别图像中像素值剧烈变化的区域,这是物体轮廓提取的关键步骤。作者详细阐述了使用filter2D卷积运算和convertScaleAbs绝对值转换这两个核心函数的实现原理,包括如何通过设计不同的卷积核来检测水平和垂直方向的边缘。文中提供了五种预定义的边缘检测核(X/Y/XY/YX方向),并给出了完整的Android实现代码示例,展示了如何将理论应用于实际图像处理。这种方法相比高级算法更透
2025-09-03 14:18:48
696
原创 学习 Android (十八) 学习 OpenCV (三)
本文介绍了OpenCV中椒盐噪声的处理方法。椒盐噪声表现为图像中随机出现的黑白像素点,可通过随机生成掩膜来模拟。文章详细阐述了椒盐噪声的数学表达和生成原理,并提供了四种去噪方法:中值滤波(首选)、双边滤波、形态学操作(开/闭运算)和非局部均值滤波(NLM)。每种方法都给出了参数设置建议和使用场景分析。最后通过代码示例展示了如何在Android中实现椒盐噪声的添加和去除,对比了不同去噪方法的效果。这些技术在图像处理算法评估、OCR预处理、数据增强等领域有广泛应用。
2025-09-01 09:25:34
758
原创 学习 Android (十七) 学习 OpenCV (二)
OpenCV 图像透视变换摘要 本文介绍了OpenCV中的透视变换技术,主要用于矫正变形图像(如侧拍的卡片)。核心步骤包括:1)获取源图像和目标图像的四角点;2)用getPerspectiveTransform计算变换矩阵;3)通过warpPerspective应用变换。文中提供了四边形检测的实现方法,包括灰度化、边缘检测、轮廓查找和顶点排序等处理流程,可自动识别图像中的四边形区域进行矫正。该技术适用于文档扫描、车牌识别等需要图像矫正的场景。
2025-08-27 10:37:38
972
原创 学习 Android (十六) 学习 OpenCV (一)
从0到1的学习并了解Android OpenCV SDK 相关知识,让小白能够轻松上手和学习。
2025-08-21 09:39:25
1642
原创 学习 Android(十五)NDK进阶及性能优化
本文深入探讨Android NDK开发中的关键知识与性能优化技巧,主要包括: JNI调用机制:详细解析Java与Native代码交互过程,包括方法查找、参数转换和堆栈切换等核心环节,分析调用性能损耗来源。 性能优化策略:提出减少调用次数、缓存方法ID、优化数组操作、控制局部引用等实用技巧,特别强调线程安全和异常处理优化。 常见陷阱防范:重点分析频繁创建Java对象和内存泄漏问题,提供局部引用管理、全局引用释放等解决方案。 Native内存管理:系统讲解内存泄漏根源和规避方法,包括正确使用内存分配/释放API
2025-08-06 17:43:43
1270
原创 学习 Android(十四)NDK基础
本文介绍了Android NDK的基础知识与应用方法。主要内容包括: NDK概念与原理:讲解NDK工具集的作用(在Android中使用C/C++代码),以及通过JNI实现Java与原生代码交互的流程。 开发环境配置:详细说明在Android Studio中安装NDK、CMake和LLDB的步骤,以及如何配置build.gradle文件和CMake构建脚本。 实践示例:演示创建包含C++实现的简单原生库(如加法运算),并展示Java层如何加载和调用native方法。 关键技术点:涉及JNI函数签名规则、数据类
2025-08-06 17:42:00
921
原创 学习 Flutter(五):玩安卓项目实战 - 下
Flutter 玩安卓项目实战(下)摘要 本文完成了Flutter玩安卓项目的剩余功能开发,主要包括: 个人中心界面: 显示用户昵称和使用本地图片作为头像 实现退出登录功能,清除cookie并跳转至登录页 提供收藏列表和关于我的入口 收藏列表功能: 实现API接口获取用户收藏文章 创建CollectResponse模型处理返回数据 展示收藏列表页面 其他功能: 文章详情页 搜索界面 项目采用MVVM架构,使用Provider进行状态管理,实现了完整的用户登录/退出流程。退出功能通过清除cookie实现,后续
2025-07-23 11:08:12
458
原创 学习 Flutter (四):玩安卓项目实战 - 中
本文介绍了Flutter玩安卓项目实战中的首页模块开发,重点讲解了首页轮播图和文章列表的自定义实现。作者通过创建BaseWidget基类组件封装了常见的UI样式和交互行为,该组件支持点击事件、尺寸设置、边距调整、圆角背景、渐变色等多种配置。文章详细展示了如何利用BaseWidget构建轮播图指示器,包括位置参数、颜色过渡等细节实现。后续将基于这个可复用的基础组件继续开发首页的轮播图和文章列表功能,体现了组件化开发的思路。
2025-07-17 15:58:57
1207
1
原创 学习 Flutter (三):玩安卓项目实战 - 上
本文介绍了Flutter项目实战的准备工作,包括项目结构搭建、资源配置和依赖添加。主要内容包含: 项目结构设计:采用分层架构,包括应用配置层、基础抽象层、UI层等8个模块。文章以wanandroid开放API为基础,准备开发一个完整的Flutter应用,后续将逐步实现各功能模块。项目采用原生开发方式,避免使用过多第三方插件。
2025-07-14 16:13:02
742
翻译 学习 Flutter(二)
Flutter 布局构建指南摘要 本文介绍了如何使用 Flutter 构建应用布局,重点关注 widget 的排列组合。主要内容包括: 布局规划:通过绘制布局图,识别行、列等基本元素,将 UI 分解为可实现的 widget 结构。 Title 部分实现:创建 TitleSection 组件,包含名称、位置和评分信息,使用 Row 和 Padding 进行排列。 滚动视图:将 Center 替换为 SingleChildScrollView 和 Column,使内容可滚动显示。 Button 部分:构建包含图
2025-07-11 11:23:56
132
原创 Android杂谈(二):缩放图片
Android原生图像浏览器实现方案 本项目展示了使用纯Android API开发的图片浏览器,具备图片加载、缩放和滑动浏览功能。核心特点包括:完全基于原生API实现(ViewPager、BitmapFactory等),支持本地和网络图片加载,实现了手势缩放和平移操作。项目结构清晰,包含ZoomImageView(自定义缩放视图)、ImageLoader(图片加载器)和ImagePagerAdapter(滑动适配器)三大组件。通过此项目可深入掌握Android图像处理基础技术,包括Canvas绘图、Matr
2025-06-28 09:40:40
475
原创 Android杂谈(一):悬浮球
摘要 Android悬浮球(Floating Ball)是一种悬浮在其他应用之上的小型交互控件,通常以圆形图标呈现,支持拖动和快捷操作。本文系统介绍了悬浮球的实现方法:首先概述其定义、基本概念和常见应用场景,如辅助操作、快捷入口、小窗功能等;然后详细讲解基础实现,包括创建悬浮球布局、显示/隐藏控制、拖拽功能以及位置保存;接着探讨交互设计、权限管理和兼容性问题;最后提供实战示例代码。实现上主要采用Service+WindowManager方式,需SYSTEM_ALERT_WINDOW权限,并建议加入边缘吸附、
2025-06-26 16:50:48
2065
原创 学习Android(十三)JAR和AAR
在 Android 开发中,JAR 和 AAR 是两种常见的打包格式,分别用于封装和复用代码库。JAR 适用于纯 Java/Kotlin 代码库,仅包含编译后的 .class 文件,不包含 Android 资源或清单文件,适合封装通用工具类。AAR 专为 Android 平台设计,包含 .class 文件、资源文件、清单文件等,适合封装自定义控件、布局等可视化组件。JAR 适用于平台无关的通用逻辑库,而 AAR 则用于 Android 项目中的功能模块共享。创建 JAR 包时,可以通过 Android St
2025-05-22 08:30:00
1685
原创 学习 Android(十一)Service
Android Service 是四大组件之一,用于在后台执行长期任务或跨进程通信。它分为启动型(Started)和绑定型(Bound)两种类型: 启动型:通过 startService() 调用,独立运行,适合单次或周期性任务。 绑定型:通过 bindService() 调用,提供客户端-服务端交互,适用于进程间通信。 生命周期方面: 启动型:onCreate() → onStartCommand() → onDestroy() 绑定型:onCreate() → onBind() → onUnbind()
2025-05-21 14:49:29
1314
原创 学习 Android(十)Fragment的生命周期
Android 的 Fragment 是一个具有独立生命周期的可重用 UI 组件,能够在运行时动态添加、移除和替换,支持单 Activity 多界面、动态布局和响应式设计。Fragment 的生命周期与 Activity 紧密关联,但包含更多与视图相关的回调方法,如 onAttach()、onCreateView()、onViewCreated() 等。掌握这些生命周期方法有助于在适当的阶段执行初始化、资源绑定、状态保存与释放操作,避免内存泄漏和 UI 崩溃。通过合理使用 Fragment 的生命周期,开发
2025-05-21 14:48:22
4022
原创 学习Android(十二)Thread
Android 应用的 UI 操作在主线程执行,若在主线程中执行耗时任务会导致界面卡顿甚至应用无响应(ANR)。因此,耗时任务应在子线程中执行,并通过合适的通信机制将结果回传给主线程。Android 提供了多种线程管理工具,如 Thread、HandlerThread 和 ExecutorService(线程池),以简化异步编程。 Thread 是最基础的线程类,通过 start() 启动线程,run() 为线程执行入口。HandlerThread 继承自 Thread,内部自动创建 Looper 和消息队
2025-05-21 13:59:16
1301
原创 学习 Android(九)Activity的生命周期
Android 应用中的 Activity 生命周期管理是确保应用稳定性和用户体验的关键。Activity 的生命周期分为六大状态:Created、Started、Resumed、Paused、Stopped 和 Destroyed,每个状态都有相应的回调方法供开发者插入自定义逻辑。在 onCreate() 中初始化布局和数据,onStart() 和 onResume() 中恢复可见和交互状态,onPause() 和 onStop() 中保存数据和释放资源,onDestroy() 中彻底清理资源。通过正确使
2025-05-13 10:12:41
1464
原创 学习 Android(八)自定义View
在 Android 开发中,自定义 View 是通过继承系统 View 或其子类来实现特定外观和行为的组件。它突破了系统自带组件的限制,满足复杂设计需求,提高 UI 重用性和代码封装性。自定义 View 的核心机制包括重写 onDraw()、onMeasure() 和 onTouchEvent() 等方法,以控制绘制、测量和事件处理。其主要作用包括精细化外观与行为控制、代码复用与模块化,以及优化性能。自定义 View 的优势在于提高可维护性、优化性能,并拓展框架能力。开发者应在默认组件无法满足需求、多处重复
2025-05-12 09:47:29
890
原创 学习 Android(七)动画
在Android开发中,动画是提升用户体验的重要工具,主要通过补间动画和属性动画实现。补间动画通过XML或代码定义动画的开始和结束状态,系统自动计算中间过渡帧,支持平移、旋转、缩放和透明度四种类型,但仅改变View的绘制效果,不改变实际属性。属性动画则通过动态修改对象的属性值实现动画,适用于任何对象,核心类包括ValueAnimator、ObjectAnimator和AnimatorSet。示例代码展示了如何使用XML定义补间动画,并通过代码触发动画效果。属性动画则提供了更灵活的控制方式,能够直接操作目标对
2025-05-11 10:29:41
1212
原创 学习 Android(六)Netty通信实战
在 Android 开发中,Netty 是一个基于 Java NIO 的高性能、异步事件驱动的网络应用框架,主要用于构建需要高效网络通信的客户端或服务端。尽管 Android 开发中常见的 HTTP 请求通常使用 OkHttp 或 Retrofit,但在某些复杂场景下,Netty 能提供更底层的控制和更高的性能。接下来跟着文章一起学习一下 Netty 。异步非阻塞模型协议高度可定制零拷贝优化高拓展性上述大致介绍了一下 Netty 的相关知识,为了对其有进一步的了解,本文将实现一个简单的实时通信功能来进一步的
2025-04-30 11:43:37
1403
1
原创 学习 Android(五)玩安卓项目实战
在上一章节,我们已经实现了项目架构的搭建,并且将项目需要的东西处理好了,并且实现了登录、注册、首页的实现,这一章我们将继续实现其他页面设计。
2025-04-29 16:14:57
1349
2
原创 学习 Android(四)玩安卓项目实战
在上一章节,我们对Android中常用的项目架构模式有了一定的了解,那么现在我们既有轮子(基础UI),又有框架了,是时候开始造车了,那么本章将开始进行Android项目实战练习,具体实战什么看作者想要实战什么(无规划,难易不定)…遇到啥就针对的去实战,本章节将针对MVP项目架构进行实战,篇幅会比较长,会针对某些插件,知识点进行单独的讲解,跟着一篇文章可以实现一个项目的完整运行!!!
2025-04-27 16:12:10
1461
原创 学习 Android(三)
在上一章节,我们对Android中使用的基础UI有了大致的了解和使用,这使得我们开发复杂界面有了基础,但是一个好的项目不能只有好界面,还需要有好的项目架构管理,尤其是在团队开发中,一个有条理的项目架构,可以避免很多麻烦,那么本章节我们将讲讲常用的几种软件架构模式,以及为什么要使用这些架构模式。
2025-04-23 10:18:12
1188
原创 学习 Android(二)
在上一章节,我们成功的运行了第一个Android项目,使得我们对整体项目结构有个大概的认识,但这仅仅只是一个开始,接下来本章节将会将Android中的常见的UI组件来进行逐个分析讲解。常用UI组件速查表运行上述例子我们可以了解大致 能做到那些文本显示效果,接下来我们来介绍一下 的一些基础属性当然我们也可以在代码中动态的进行设置上述的基础属性,就如上述例子我们去设置 文本和富文本的操作一样,动态的去设置文本属性可以实现更多有趣的效果,这个需要我们在日后开发中自己去发觉和研究。通过观察源码我们
2025-04-22 10:53:50
1220
原创 学习 Android(一)
移动技术从未停止进化,而 Android 始终是创新的核心引擎。无论是渴望高薪职位、追求创业梦想,还是希望用技术创造价值,学习 Android 开发都是拥抱数字时代的战略性选择。从一行代码到一个改变世界的应用,你的旅程将从这里开始,接下来我们将开始进行学习Android开发。
2025-04-11 15:54:02
2773
原创 学习Kotlin语法(三)
在上一节,我们对Kotlin中面向对象编程(OOP)的相关知识有了大致的了解,本章节我们将去进一步了解函数、lambada表达式、内联函数、操作符重载、作用域函数。
2025-03-27 11:11:46
576
原创 学习Kotlin语法(二)
经过上一章节,我们对Kotlin基础语法有了大致的了解,了解了什么是基本类型、集合、控制流程、函数、类、空安全,接下来我们将更近一步的去了解Kotlin的相关知识,本章节将详细的学习Kotlin中面向对象编程(OOP)的相关知识。类Kotlin中的类是使用关键字class声明的:类声明由类名、类头(指定其类型参数、主构造函数和其他一些东西)和用花括号括起来的类体组成。页眉和正文都是可选的;如果类没有主体,则可以省略花括号。构造函数(主构造函数)Kotlin中的类有一个主构造函数,可能还有一个或多个辅
2025-03-07 11:33:51
2298
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅