0

組み込みの OpenCV を使用してビデオ ファイルからフレームを抽出するネイティブ部分を備えたアプリを開発しています。これまでのところ、このエラーが発生しています:

.../jni/ocv.c:12: undefined reference to `cvCreateFileCapture'

私の Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := ocv
LOCAL_SRC_FILES := ocv.c

include $(BUILD_SHARED_LIBRARY)

アプリケーション.mk:

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi

ocv.c:

#include <string.h>
#include <jni.h>
#include <stdio.h>
#include <dlfcn.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>

jstring Java_com_ice_salvador_MainActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) {
    IplImage* currFrame = 0;
    CvCapture* cap = 0;

    cap = cvCaptureFromFile("/mnt/sdcard/vvv.3gp"); //test video

    return (*env)->NewStringUTF(env, "Hello from native code!");
}

OpenCV-2.4.3-android-sdk、Android NDK r8b、Eclipse Juno、Windows を使用しています。

IplImageCvCapture行を削除すると解決され、コードがコンパイルされますcvCaptureFromFile-したがって、正しい方法であると思います。私はJNIとOpenCVが初めてです。あなたの助けに感謝!ありがとう。

4

1 に答える 1

1

私自身の質問を未回答のままにしないでください..

1) Android.mk を変更して、SDK から OpenCV.mk を含め、ビルドに .so lib を含めるようにしました。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

include c:\dev\OpenCV-2.4.3-android-sdk\sdk\native\jni\OpenCV.mk

LOCAL_MODULE    := ocv
LOCAL_SRC_FILES := ocv.c
LOCAL_LDLIBS += -Lc:\dev\OpenCV-2.4.3-android-sdk\sdk\native\libs\armeabi

include $(BUILD_SHARED_LIBRARY)

#LOCAL_PATH := /home/spatialite/jni
include $(CLEAR_VARS)
LOCAL_MODULE := libopencv_java
LOCAL_SRC_FILES := libopencv_java.so
include $(PREBUILT_SHARED_LIBRARY)

2) libopencv_java.so を jni/ フォルダーにコピーしました。

3) Java コードを次のように変更しました。

static {
  System.loadLibrary("opencv_java");
  System.loadLibrary("ocv");
}

そして、エラーはなくなりました。

于 2012-11-16T21:56:37.533 に答える