百科.dev
全部条目AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
S

SmartOpenCV

> 编程语言
开源

:fire: :fire: :fire: SmartOpenCV 是一个在 Android 上的 OpenCV 增强库,解决了 OpenCV Android SDK 在图像预览方面存在的诸多问题,且无需修改 OpenCV SDK 源码,与 OpenCV 的 SDK 解耦

2.0K stars0 点赞0 次浏览
访问官网GitHub

工具介绍

:fire: :fire: :fire: SmartOpenCV 是一个在 Android 上的 OpenCV 增强库,解决了 OpenCV Android SDK 在图像预览方面存在的诸多问题,且无需修改 OpenCV SDK 源码,与 OpenCV 的 SDK 解耦

SmartOpenCV

前言

:fire: :fire: :fire: 随着人工智能的快速发展以及终端设备硬件水平的不断提升,在终端设备上直接运行智能系统成为可能,端侧智能具备低延时,隐私安全等特点。同时降低了云端智能存在的网络传输不可靠风险,使得端侧智能越来越得到重视。端侧智能比较成熟的领域就是NLP以及CV。在CV领域OpenCV作为开源且强大的跨平台计算机视觉库,在图像处理以及图像识别方向得到了广泛应用。但是在Android平台OpenCV官方SDK在图像预览方面存在诸多缺陷。

SmartOpenCV是什么

SmartOpenCV是一个OpenCV在Android端的增强库,解决了OpenCV Android SDK在图像预览方面存在的诸多问题,而且无需修改OpenCV SDK源码,与OpenCV的SDK解耦,只需替换xml中原OpenCV的JavaCameraView/JavaCamera2View即可达到具备OpenCV官方SDK的原功能以及SmartOpenCV的增强功能。

OpenCV官方SDK存在的问题

OpenCV Android端SDK虽然很容易上手和使用,但是预览存在很多问题,常见问题如下:

  • 默认横屏显示,且无法通过接口修改预览方向

  • 预览绘制存在黑边:OpenCV默认绘制算法在绘制预览帧图像到Canvas时存在一定的偏移,在视觉上表现就是预览帧只会占SurfaceView控件的一部分区域,偏移部分区域会显示为黑色

…
  • 预览帧大小选择算法不符合实际场景要求:对于预览帧大小的选择,OpenCV默认算法是选择小于预览控件(或设置的最大帧大小)的最大预览,这将导致在很多情况下预览图像的显示不能铺满整个控件甚至远小于控件大小, 在绝大部分业务场景下,这种算法不能满足实际需求
…

SmartOpenCV的特点

  • 易使用:如果你项目中之前使用的是OpenCV的官方SDK,那么引入SmartOpenCV后只需将xml文件中的JavaCameraView/JavaCamera2View替换为SmartOpenCV的CamerPreview/Camera2Preview即可达到与使用官方SDK相同的效果

  • 功能增强:

    1. 预览自适应:自动根据前后摄像头,横竖屏以及不同摄像头参数来调整与适配预览方向以及大小,开发者无需写任何额外代码
    2. 可扩展预览绘制算法:SmartOpenCV内置了一种默认的预览帧绘制算法,同时提供策略接口让开发者根据自己的业务场景自定义预览绘制算法
    3. 可扩展预览帧大小选择算法:SmartOpenCV内置了一种默认的预览帧大小计算算法,同时提供策略接口让开发者根据自己的业务自定义预览帧大小计算算法
    4. 支持USB摄像头:USB摄像头作为外设接入设备,和手机/平板等移动设备内置摄像头存在差异,SDK内部在处理移动设备摄像头的逻辑时也兼容了对闸机等的USB摄像头的处理
  • 提供更友好的API接口:在继承OpenCV官方接口的同时,SmartOpenCV将众多繁杂操作统一通过CameraConfiguration来配置,提供更友好的Fluent API接口,让开发者能够更灵活的控制预览显示相关参数与配置

  • 不直接依赖官方SDK,方便升级官方SDK:与OpenCV官方SDK解耦,只要官方SDK内部核心逻辑未做修改,那么SmartOpenCV可以兼容所有版本的官方SDK,使用SmartOpenCV后如果以后打算升级依赖的OpenCV为更新版本,只需将OpenCV的依赖更新为新版本即可,代码无需做任何改动

效果对比

以人脸识别为例

横屏 竖屏
OpenCV
SmartOpenCV

Demo对比体验

smartopencv-app-debug.apk
opencv-app-debug.apk

Integration

Step1:在项目根目录的build.gradle中添加对jitpack仓库的配置

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Step2:在需要使用SmartOpenCV库的模块中添加依赖

dependencies {
	implementation('com.github.HuTianQi:SmartOpenCV:1.0.1') { // 版本号建议使用已release的最新版本
        exclude module: 'openCVLibrary411' // 由于目前多模块依赖时jitpack打包存在bug,排除打包时依赖的该模块
    }
}

Usage

基础用法

在项目中需要使用预览的xml中用SmartOpenCV的CameraPreview/Camera2Preview替换OpenCV的JavaCameraView/JavaCamera2View即可,就这么简单,其余的什么都不用做

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    
    
    
    

    <tech.huqi.smartopencv.core.preview.CameraPreview
        android:id="@+id/fd_activity_surface_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

高级用法

如果打算通过SmartOpenCV提供的接口来更灵活的控制预览显示相关参数与配置,那么调用SmartOpenCV.getInstance().init()传入前面获取的预览控件对象即可,用法如下:

…

LICENSE

LICENSE

公众号

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

C++aiandroidcameracanvas

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月17日
分类编程语言
定价开源

> 相关工具

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言