在OpenCV2.3.1中使用VideoCapture捕获安卓摄像头

时间:2012-01-05 13:17:11

标签: android opencv camera android-ndk video-capture

我正在尝试在我的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):功能正常   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):未定义引用`cv :: cvtColor(cv :: _ InputArray const&,cv :: _ OutputArray const&,int,int)'collect2:ld返回1退出   状态make: * [/ cygdrive / c / Development / android-opencv-wsp /   VideoCamLibAndroid_v0.1 / obj / local / armeabi-v7a / liblivecamera.so]错误   1 *

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

有没有人成功使用OpenCV2.3.1的VideoCapture模块?

1 个答案:

答案 0 :(得分:2)

我遇到了完全相同的问题,在我的头撞墙几个小时后,我终于找到了解决方案!

显然,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 ?????