在 Android 设备上使用 CCV

2024-01-24

有人尝试过在 Android 上使用 libccv 吗?我在网上找不到任何示例代码,想知道如何使用 CCV 在 Android 应用程序中实现跟踪器。

这包括执行以下操作: - 处理来自 Android 设备相机的图像 -在设备屏幕上显示经过CCV处理的图像


我最近实施了类似的事情。为了实现这一目标,我使用 OpenCV 设置了一个 Android JNI 项目,并使用 OpenCV 相机读取功能来存储帧。然后,可以将指向帧数据的指针传递给 CCV 图像包装器,以便与 CCV 库函数一起使用。 CCV 具有最小的依赖性,最简单的启动和运行方法是将所需模块的源代码包含在项目的 JNI 目录中。

要使用 OpenCV 设置项目,您可以按照本教程。 http://docs.opencv.org/2.4/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.htmlOpenCV SDK 有一个用于简单相机读取器的示例项目。 Android GitHub 页面包含一个示例 HelloJNI 项目here https://github.com/googlesamples/android-ndk/tree/master/hello-jni其中展示了如何使用 JNI 通过 Java 和 C/C++ 设置 Android 项目。然后可以将 CCV 源添加到 C/C++ 源目录,以便您的 C/C++ 函数可以访问该库。

一旦您使用 OpenCV 库和 JNI 功能设置了项目,就需要使用 OpenCV 保存帧数据并将其指针传递给 C 代码。将每一帧存储为Mat对象,即Mat然后可以将对象传递给您的 C/C++ 代码,如下所示:(请注意,这只是显示所需关键代码段的摘录)

package your.namespace.here;

import org.opencv.core.Core;
import org.opencv.core.Mat;

public class MainActivity{

    // Store frames in this object for later processing
    Mat frame;

    static {
        // Load the c file name with JNI bindings, e.g. here we load test.c
        System.loadLibrary("test");
    }

    // Declare the JNI function wrapper
    public native int ccvTest( long input, long output);

    // OpenCV methods here to store the frame, see 
    // OpenCV4Android - tutorial-1-camerapreview for full 
    // code description.
    //...

    // This function to be called after each frame is stored.
    // output can then be converted to Bitmap and displayed in ImageView
    // or used for further processing with OpenCV.
    public Mat processFrame(){
        Mat output = new Mat();
        ccvTest(frame.getNativeObjAddr(), output.getNativeObjAddr());
        return output;
    }
}

使用 HelloJNI 模板,调用 CCV 库函数之一的示例 C 文件(在本示例中我们将其称为 test.c)将如下所示:

#include <string.h>
#include <jni.h>

#ifdef __cplusplus
extern "C" {
#endif
// ccv files to include should be compiled using c compiler
#include "ccv/lib/ccv.h"
#ifdef __cplusplus
}
#endif

#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT void JNICALL
Java_your_namespace_here_MainActivity_ccvTest( JNIEnv* env,
                                              jobject thiz,
                                              jlong input, jlong output)
{

    Mat* in_p  = (Mat*)input;
    Mat* out_p  = (Mat*)output;
    Mat &rgb = *in_p;
    ccv_dense_matrix_t* image = 0;

    // Pass the Mat data to the CCV Image wrapper
    ccv_read(rgb.data, &image, CCV_IO_BGR_RAW | CCV_IO_ANY_RAW |     CCV_IO_GRAY, rgb.rows, rgb.cols, rgb.step[0]);

    // Now the Mat is in ccv image format, you can pass
    // the image pointer to any ccv function you like.

    //
    // Put your calls to CCV library here..
    //

}
#ifdef __cplusplus
}
#endif

项目的树结构可能与此类似,所有 ccv 源都位于 jni/ccv 文件夹中:

此设置非常有用,因为它允许您连接 OpenCV 和 CCV 的功能。希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android 设备上使用 CCV 的相关文章

随机推荐

  • javax.ws.rs.client.Client如何配置readTimeOut?

    从com sun jersey api client Client to javax ws rs client Client如何配置客户端 FROM import com sun jersey api client Client Clien
  • 反向滚动

    我很难找到我想要完成的任务的解决方案 我正在尝试使用 JS 或其他库 来实现它 以便当用户在鼠标滚轮上向下滚动时 页面滚动的方式与通常相反 基本上 我希望首先看到页面的底部 当用户滚动时 我希望屏幕的顶部进入视图 我能找到的唯一例子是右列h
  • 具有大图像尺寸的 UIImage - 内存问题 - 崩溃

    我想加载并显示图像 jpg png 具有大尺寸 例如1800x1200 或 2000x1800 宽 x 高 如果我在 UIImageView 中显示如此大尺寸的图像 1800x1200 或 2000x1800 它也会消耗大量内存 并且应用程
  • 即使在 Ajax 页面中显式等待后,Selenium 也无法找到元素

    我正在尝试自动更新 Web 应用程序中的字段 因此登录后url不会改变 到目前为止 这是我的代码 from selenium import webdriver from selenium webdriver common keys impo
  • C++ 中的音频操作

    我希望这是发布此内容的正确位置 并且有人可以提供帮助 我是一名音乐技术学生 最近开始学习 C 因为了解一门编程语言对我的职业生涯有很大帮助 尤其是这种语言 因为它用于视频游戏行业 无论如何 进入主题 我想要创建一个程序 用 C 编写 让用户
  • 在 Python 中检查非常大的数字的素性

    检查给定的大数是否为素数的最快方法是什么 我说的是大小约为 10 32 的数字 我已经尝试过该算法 MarcoBonelli 的精彩回答 https stackoverflow com a 27946768 1195131这是 from m
  • 如何同步两个 Subversion 存储库?

    我公司有一家子公司 互联网连接速度很慢 我们的开发人员在与我们的中央交互时遇到了麻烦颠覆 http en wikipedia org wiki Subversion 28software 29服务器 是否可以为它们配置从属 镜像 他们将与服
  • 如何生成杠杆统计数据?

    我知道如何使用 leverPlot 生成图 但我找不到一种方法来为每个观察生成杠杆统计数据 就像 megastat 输出中一样 我认为您正在寻找帽子的价值 Use hatvalues fit 经验法则是检查任何比平均帽子值大 2 3 倍的观
  • Spring Data - 覆盖某些存储库的默认方法

    我只是盯着spring data and spring data rest我真的很想利用这些工具所提供的功能 在大多数情况下 基本功能非常适合我的用例 但在某些情况下 我需要对底层功能进行大量自定义 并有选择地分配一些存储库来继承我所追求的
  • 如何在Linux中使用RAW套接字发送802.11管理帧和数据帧

    我正在尝试构建一个应用程序 该应用程序将使用原始套接字从用户空间一起发送 802 11 管理帧和数据帧 我能够使用 sendto 函数发送数据帧 但我还需要发送管理帧 这让我陷入困境 有什么可能的方法吗 为了从无线接口发送管理 数据或任何类
  • 在初始化之前无法调用砌体上的方法;试图呼叫“摧毁”

    所以我尝试结合 jQuery Masonry 插件 来自 http masonry desandro com http masonry desandro com 使用 Modernizr 在低分辨率下消除砖石结构 以便我的 div 恢复到居
  • 更新到 android 8.0 oreo 后 install_failed_no_matching_abis 无法提取本机库 res=-113

    我的应用程序有问题 我使用三星 s8 我的应用程序运行良好 直到我更新到 android oreo 我卸载了我的应用程序并尝试再次运行 但出现错误 install failed no matching abis failed to extr
  • NPM 在 Windows 10 上启动时 NODE_PATH 引发错误

    我正在尝试通过以下方式构建 MEAN Todo 应用程序https github com michaelheng429 super mean stack https github com michaelcheng429 super mean
  • 如何限制 foreach 循环中迭代的元素数量?

    我有以下代码 foreach var rssItem in rss Channel Items 但只想要 6 个项目而不是所有项目 我该如何在 C 中做到这一点 只需迭代集合中的前 6 个 foreach var rssItem in rs
  • 如何使用Reactor框架2.x执行多线程map/reduce?

    我之前问过这个问题 https stackoverflow com questions 22844717 how do you execute map reduce operations with the reactor framework
  • 如何在一个 ggplot 中绘制 S&P 500 和苏富比时间序列?

    我正在使用 quantmod 包下载 S P 500 时间序列和苏富比股票 library zoo library tseries library quantmod library ggplot2 env1 new env getSymbo
  • VBox 共享文件夹中符号链接的 Windows 问题

    我在 Virtual Box 上有一个 Ubuntu 17 虚拟机 我的主机操作系统是 windows 8 1 我在主机和来宾操作系统之间创建了一个共享文件夹 现在 因为windows不支持symlinks https en wikiped
  • 优化 SQL 查询

    我目前正在开发一个内容管理系统 我想听听您对以下方面的想法 我有一张桌子 page 我们假设它看起来像这样 ID Title Content 1 Test This is a test 除此之外 我还有一个page option表 这样我可
  • 如何使用 Reflection.Emit 创建多维数组

    我想使用 Reflection Emit 创建一个多维数组并设置它的元素 就像下面的C 代码 int nums new int 2 2 nums 1 1 2 并转成IL代码 IL 0000 nop IL 0001 ldc i4 2 IL 0
  • 在 Android 设备上使用 CCV

    有人尝试过在 Android 上使用 libccv 吗 我在网上找不到任何示例代码 想知道如何使用 CCV 在 Android 应用程序中实现跟踪器 这包括执行以下操作 处理来自 Android 设备相机的图像 在设备屏幕上显示经过CCV处