"java.lang.NoClassDefFoundError: com.googlecode.javacv.ObjectFinder$Settings"
解决方法:
1、解压javacv.jar,在com/googlecode/javacv中删除 BaseChildSettings.class and BaseSettings.class,然后到cmd命令行中cd到该目录使用 jar cvf com META-INF javacv.jar重新打包 javacv.jar,
2、将javacv.jar和javacpp.jar以及armeabi中的so库拷贝到Libs下;
3、一定要将该project的package类设定为com.googlecode.javacv,然后在src中依次新建文件夹/com/googlecode/javacv然后建立mainactivity.java,右键选择新建类BaseChildSettings.classBaseSettings.class,建立这两个空类;Refresh后就可以了。
但是这样虽然解决了上面的错误,但是如果使用如下的代码会出现错误,
double[] dstCorners;
ObjectFinder objFinder = new ObjectFinder(object);
dstCorners = objFinder.find(image_1);
错误信息:
" java.lang.RuntimeException: java.lang.RuntimeException: /home/saudet/android/OpenCV-2.4.0/modules/legacy/src/features2d.cpp:77: error: (-213) OpenCV was built without SURF support in function void cvExtractSURF(const CvArr*, const CvArr*, CvSeq**, CvSeq**, CvMemStorage*, CvSURFParams, int)"
后来查阅了很多论坛,好多人都有这样的问题,
https://groups.google.com/forum/#!topic/javacv/uuBToveMmOQ
https://groups.google.com/forum/#!searchin/javacv/opencv$20was$20built$20without$20surf/javacv/WlAFXg_w7LE/_RX7X6X2zrgJ
最后发现了一个人使用如下的程序就没问题了,
IplImage result = cvLoadImage("/sdcard/DCIM/phone1.jpg",CV_LOAD_IMAGE_GRAYSCALE);
ObjectFinder objFinder = null;
ObjectFinder.Settings objectFinderSettings = null;
try {
objectFinderSettings = new ObjectFinder.Settings();
objectFinderSettings.setObjectImage(result);
objFinder = new ObjectFinder(objectFinderSettings);
} catch (Exception e) {
e.printStackTrace();
}
但是接下来再进行objFinder.find(img)的时候会出现错误,
" java.lang.RuntimeException: java.lang.RuntimeException: /home/saudet/android/OpenCV-2.4.0/modules/legacy/src/features2d.cpp:77: error: (-213) OpenCV was built without SURF support in function void cvExtractSURF(const CvArr*, const CvArr*, CvSeq**, CvSeq**, CvMemStorage*, CvSURFParams, int)"
查找了半天,应该是cvextractSURF是没法使用的。