简体   繁体   中英

undefined reference to 'cv::findHomography

I can't make to work OpenCV example with finding object on the scene in Android. I take prebuilt static libraries from OpenCV4Android SDK. My Android.mk

    # Open CV libraries
include $(CLEAR_VARS)
LOCAL_MODULE := opencv_features2d
LOCAL_SRC_FILES := prebuilt/OpenCV/libs/$(TARGET_ARCH_ABI)/libopencv_features2d.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := opencv_core
LOCAL_SRC_FILES := prebuilt/OpenCV/libs/$(TARGET_ARCH_ABI)/libopencv_core.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := opencv_imgproc
LOCAL_SRC_FILES := prebuilt/OpenCV/libs/$(TARGET_ARCH_ABI)/libopencv_imgproc.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := opencv_calib3d
LOCAL_SRC_FILES := prebuilt/OpenCV/libs/$(TARGET_ARCH_ABI)/libopencv_calib3d.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := opencv_flann
LOCAL_SRC_FILES := prebuilt/OpenCV/libs/$(TARGET_ARCH_ABI)/libopencv_flann.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := opencv_contrib
LOCAL_SRC_FILES := prebuilt/OpenCV/libs/$(TARGET_ARCH_ABI)/libopencv_contrib.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := opencv_legacy
LOCAL_SRC_FILES := prebuilt/OpenCV/libs/$(TARGET_ARCH_ABI)/libopencv_legacy.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := opencv_ml
LOCAL_SRC_FILES := prebuilt/OpenCV/libs/$(TARGET_ARCH_ABI)/libopencv_ml.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := opencv_objdetect
LOCAL_SRC_FILES := prebuilt/OpenCV/libs/$(TARGET_ARCH_ABI)/libopencv_objdetect.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := opencv_tbb
LOCAL_SRC_FILES := prebuilt/OpenCV/3rdparty/libs/$(TARGET_ARCH_ABI)/libtbb.a
include $(PREBUILT_STATIC_LIBRARY)

# opencv_nonfree
include $(MY_CORE_PATH)/opencv_nonfree/Android.mk

# Detect image
include $(MY_CORE_PATH)/detectimage/Android.mk

Nonfree Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := opencv_nonfree
LOCAL_SRC_FILES := := nonfree_init.cpp \
 sift.cpp \
 surf.cpp
LOCAL_C_INCLUDES := $(MY_CORE_PATH)/prebuilt/OpenCV/include
LOCAL_STATIC_LIBRARIES :=  opencv_features2d opencv_imgproc opencv_video opencv_flann opencv_core opencv_tbb
LOCAL_LDLIBS := -ldl -lz -llog

include $(BUILD_SHARED_LIBRARY)

And detectimage Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := detect_image
LOCAL_SRC_FILES := detectimage.cpp
LOCAL_C_INCLUDES := $(MY_CORE_PATH)/prebuilt/OpenCV/include
LOCAL_SHARED_LIBRARIES :=  opencv_nonfree 
LOCAL_LDLIBS := -ldl -lz -llog

include $(BUILD_SHARED_LIBRARY)

And finally .cpp problem part is

std::vector<Point2f> obj;
std::vector<Point2f> scene;
//....
Mat H = findHomography(obj, scene, CV_RANSAC);

Looks like some problem with STL

If set APP_STL flag in Application.mk file as

APP_STL := gnustl_shared

Everything works fine

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM