关于opencv:在OpenCV2.3.1中使用VideoCapture捕获android摄像机

我正在尝试在我的OpenCV本机应用程序中使用VideoCapture。至
构建我的应用程序,我遵循发布的说明
OpenCV2.3.1版本,所以我有一个Android.mk文件来构建我的应用程序,
Eclipse中的Builder可以直接从Eclipse中完成。
一切正常,可以编译和链接其他openCV模块,但是当我使用VideoCapture时,出现如下链接错误:

SharedLibrary : liblivecamera.so
C:/Development/android-opencv-wsp/VideoCamLibAndroid_v0.1/obj/local/
armeabi-v7a/libopencv_highgui.a(cap_android.o): In function
CvCapture_Android::convertYUV2BGR(int, int, unsigned char const*,
cv::Mat&, bool, bool)': cap_android.cpp:
(.text._ZN17CvCapture_Android14convertYUV2BGREiiPKhRN2cv3MatEbb
*+0x1c6): undefined reference to
cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)' cap_android.cpp:
(.text._ZN17CvCapture_Android14convertYUV2BGREiiPKhRN2cv3MatEbb
+0x1f8): undefined reference to `cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)' collect2: ld returned 1 exit
status make: * [/cygdrive/c/Development/android-opencv-wsp/
VideoCamLibAndroid_v0.1/obj/local/armeabi-v7a/liblivecamera.so] Error
1*

如果我使用opencv2.3.0,则可以使其工作(使用CMake编译),但是我确实需要使用OCV2.3.1及其新功能。

有没有人成功地将VideoCapture模块与OpenCV2.3.1结合使用?


我也遇到了同样的问题,将头撞在墙上几个小时后,我终于找到了解决方法!

显然,OpenCV 2.3.1随附的OpenCV.mk中存在错误。

以下行:

OPENCV_MODULES := contrib calib3d objdetect features2d video imgproc highgui ml legacy flann core

应替换为:

OPENCV_MODULES := contrib legacy objdetect calib3d features2d video highgui ml imgproc flann core

它看起来非常相似,但是如果您查看模块的顺序,则会有细微的差别。

通过查看状态如下的OpenCVConfig.cmake文件,您可以了解此更改的逻辑:
#libraries order is very important because linker from Android NDK is one-pass linker

如果它是如此重要,为什么它不包含在原始的OpenCV.mk中????