我正在使用 android studio 在 android 上使用 opencv 开发特征提取/匹配应用程序。我关注了 these steps使用 native 代码以使用 SIFT 或 SURF 算法。我已将文件夹(armeabi、armeabi-v7a、...等)复制到 jniLibs 文件夹,这是我的主要方法代码
public class MainActivity extends Activity implements CvCameraViewListener2{
private Mat mRgba;
private Mat mGrayMat;
private CameraBridgeViewBase mOpenCvCameraView;
Mat descriptors ;
List<Mat> descriptorsList;
FeatureDetector featureDetector;
MatOfKeyPoint keyPoints;
DescriptorExtractor descriptorExtractor;
DescriptorMatcher descriptorMatcher;
boolean mIsJavaCamera = true;
static {System.loadLibrary("opencv_java");}
////////////////////////////////////////////////////////////////
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
//Log.i(TAG, "OpenCV loaded successfully");
mOpenCvCameraView.enableView();
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
@Override
public void onCameraViewStarted(int width, int height) {
mRgba = new Mat();
mGrayMat = new Mat();
featureDetector=FeatureDetector.create(FeatureDetector.SIFT);
descriptorExtractor=DescriptorExtractor.create(DescriptorExtractor.SURF);
descriptorMatcher=DescriptorMatcher.create(6);
keyPoints = new MatOfKeyPoint();
descriptors = new Mat();
}
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
final Mat rgba = inputFrame.rgba();
Imgproc.cvtColor(rgba, rgba, Imgproc.COLOR_RGBA2GRAY);
featureDetector.detect(rgba, keyPoints);
Features2d.drawKeypoints(rgba, keyPoints, rgba);
return rgba;
}
当我编译并运行应用程序时,它运行不到一秒钟然后崩溃。
你有什么建议?? (我使用的是 Android Studio 1.1 而不是 Eclipse)。
提前致谢。
最佳答案
您正在使用 BaseLoaderCallback 方法,但缺少 OPENCV 初始化。
在您的 onCreate 中包含以下代码行然后您将能够访问 OPENCV 代码。
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
关于android - 使用 SIFT/SURF 进行特征提取 在 android 上使用 opencv 使用 Android Studio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28651923/