我使用OpenCV Android非常新。 http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.html 当我运行我的设备代码时,logcat的出来这个调试行:OpenCV上的静态初始化Android 2.4.10
加载库第一次尝试失败
前几天,我已经通过本教程在这里遇到麻烦静态初始化
我已经尝试了一堆解决方案,如: - 添加行mOpenCVCallBack.onManagerConnected(LoaderCallbackInterface.SUCCESS);到OnCreate() - 将OpenCVAndroid/sdk/native/libs /复制到Project/libs/ - ... 对我无效。 你们中的任何一个都接管了它?请帮助 这是我的java文件:
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.ImageView;
public class MainActivity extends Activity {
static
{
if(!OpenCVLoader.initDebug()) {
Log.d("ERROR", "Unable to load OpenCV");
} else {
Log.d("SUCCESS", "OpenCV loaded");
}
}
private ImageView mImage;
private static final String TAG = "MyActivity";
private Mat image, corners_;
private static final int CAMERA_PIC_REQUEST = 1111;
// Native method
public native void detectCorners (long img, long corners_final);
public native void Resize2Defined (long img, long corners_, int width, int height, long img_out);
public native void EnhanceImage (Mat img, Mat img_out);
private BaseLoaderCallback mLoaderCallBack = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, "OpenCV loaded successfully");
System.loadLibrary("ScannerApp");
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallBack);
mImage = (ImageView) findViewById(R.id.camera_image);
//1
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, CAMERA_PIC_REQUEST);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_PIC_REQUEST) {
//2
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
// mImage.setImageBitmap(thumbnail);
// Read image
image = new Mat();
Utils.bitmapToMat(thumbnail, image);
corners_ = new Mat();
detectCorners(image.getNativeObjAddr(), corners_.getNativeObjAddr());
Mat quad_img = new Mat();
int width = 300, height = 300;
Resize2Defined (image.getNativeObjAddr(), corners_.getNativeObjAddr(), width, height, quad_img.getNativeObjAddr());
Bitmap bmp = Bitmap.createBitmap(quad_img.cols(), quad_img.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(quad_img, bmp);
mImage.setImageBitmap(bmp);
//3
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
thumbnail.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
//4
File file = new File(Environment.getExternalStorageDirectory()+File.separator + "image.jpg");
try {
file.createNewFile();
FileOutputStream fo = new FileOutputStream(file);
//5
fo.write(bytes.toByteArray());
fo.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
如果您将您的gradle(build.gradle在您导入的opencv文件夹中)文件发布,这会有所帮助。只有当你正确地放置了所需的依赖关系后,代码才会起作用。 – Maverick 2015-10-09 10:46:00