将帧(安卓中的垫子数据)从安卓传递到本机 c++ 并检测人脸
Pass frame(mat data in android ) from android to native c++ and detect face
我给相机帧并在 Android 项目中初始化 OpenCV,但我不知道如何将帧传递给C++方法并从那里执行人脸检测......
我该怎么做?
我使用CameraBridgeViewBase.CvCameraViewListener2
然后得到这样的框架:
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
mRgba = inputFrame.rgba();
Core.transpose(mRgba, mRgbaT);
Imgproc.resize(mRgbaT, mRgbaF, mRgbaF.size(), 0,0, 0);
Core.flip(mRgbaF, mRgba, 1 );
return mRgba;
}
我只是不知道如何将相机帧从 android 发送到 c++,然后将该相机帧从 c++ 发回 android。
您必须在具有本机开发工具包(NDK(支持的Android上设置OpenCV。此 Android NDK 使您能够在 C++ 中实现 OpenCV 图像处理管道,并通过 JNI(Java Native Interface(从 Android Kotlin/Java 代码调用该C++代码。
您首先必须在MainActivity中定义一个 javanative
函数.java :
public native void processFrame(long matAddrGray);
然后,您将在本机 lib.cpp文件中定义一个等效C++:
void JNICALL Java_com_example_nativeopencvandroidtemplate_MainActivity_processFrame(JNIEnv *env, jobject instance, jlong matAddrGray)
从java调用processFrame
本机函数实际上会调用 C++ 等效函数:
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
Mat matGray = inputFrame.gray();
processFrame(matGray.getNativeObjAddr());
return matGray;
}
然后,您可以在C++中检索 Mat 对象并对其进行处理:
void JNICALL Java_com_example_nativeopencvandroidtemplate_MainActivity_processFrame(JNIEnv *env, jobject instance, jlong matAddrGray) {
Mat &mGr = *(Mat *) matAddrGray;
// process Mat
...
}
以下是Github上的教程,其中包含一个示例OpenCV本机应用程序,以及如何在支持NDK的Android Studio中设置适用于Android的OpenCV 4.1.1的说明。
免责声明:我写了那个教程
相关文章:
- 从C++本机插件更新Vector3数组
- GCC本机矩阵运算库
- VC++本机单元测试,找不到调试符号
- 在这种情况下,java对象是否可以调用本机函数
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 无法将标准库导入本机 android 项目中的头文件
- 使用本机 C++ 应用程序中的 C# 代码
- 在nodejs中使用本机代码的最佳方法是什么?
- 如何告诉本机节点模块所需的dll存储在哪里?
- 在自定义程序中使用本机 Windows 自然顺序排序
- 如何在C++非托管/本机 DLL 中从注册免费 COM C# 托管 DLL 创建 COM 对象
- MS 本机单元测试 - 断言::线程失败不起作用
- 将音频从浏览器流式传输到WebRTC本机C++应用程序
- Winapi - SetWindowLongPtr in ShutdownBlockReason创建/销毁JNI本机代码
- C++/CLI 混合托管/本机 DLL 不起作用
- 子系统中的异常处理:本机
- 多次调用本机方法时出现致命错误
- 如何使用 Malloc 调试来检查本机内存泄漏?
- 使用本机 JNI 静态方法实现C++ Java 运行时错误