2015-07-20 75 views
0

我有2.4.10的Android 3.0 OpenCV的问题

package org.opencv.samples.tutorial1; 

import java.util.List; 

import org.opencv.android.BaseLoaderCallback; 
import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame; 
import org.opencv.android.LoaderCallbackInterface; 
import org.opencv.android.OpenCVLoader; 
import org.opencv.core.Mat; 
import org.opencv.core.MatOfPoint; 
import org.opencv.core.Scalar; 
import org.opencv.imgproc.Imgproc; 

import org.opencv.android.CameraBridgeViewBase; 
import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.SurfaceView; 
import android.view.WindowManager; 
import android.widget.Toast; 

public class Tutorial1Activity extends Activity implements CvCameraViewListener2 { 
    private static final String TAG = "OCVSample::Activity"; 
private CameraBridgeViewBase mOpenCvCameraView; 
private boolean    mIsJavaCamera = true; 
private MenuItem    mItemSwitchCamera = null; 
Mat gray = new Mat(); 
Mat cany = new Mat(); 


//private List<MatOfPoint> contours; 

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; 
     } 
    } 
}; 

public Tutorial1Activity() { 
    Log.i(TAG, "Instantiated new " + this.getClass()); 
} 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    Log.i(TAG, "called onCreate"); 
    super.onCreate(savedInstanceState); 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

    setContentView(R.layout.tutorial1_surface_view); 

    mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_java_surface_view); 

    mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE); 

    mOpenCvCameraView.setCvCameraViewListener(this); 
} 

@Override 
public void onPause() 
{ 
    super.onPause(); 
    if (mOpenCvCameraView != null) 
     mOpenCvCameraView.disableView(); 
} 

@Override 
public void onResume() 
{ 
    super.onResume(); 
    if (!OpenCVLoader.initDebug()) { 
     Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization"); 
     OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback); 
    } else { 
     Log.d(TAG, "OpenCV library found inside package. Using it!"); 
     mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS); 
    } 
} 

public void onDestroy() { 
    super.onDestroy(); 
    if (mOpenCvCameraView != null) 
     mOpenCvCameraView.disableView(); 
} 

public void onCameraViewStarted(int width, int height) { 



} 

public void onCameraViewStopped() { 
} 

public Mat onCameraFrame(CvCameraViewFrame inputFrame) { 



    gray = inputFrame.gray(); 

    Imgproc.Canny(gray, cany, 225, 250, 3, true); 









    return cany; 




    } 
} 

当我OpenCV库更改为3.0的STOPP工作这段代码的工作非常出色的OpenCV的公司给我 不幸的是,项目名称预览已停止

和亚洲开发银行错误的

07-20 13:11:14.198: W/dalvikvm(3977): No implementation found for native Lorg/opencv/core/Mat;.n_Mat:()J 
07-20 13:11:14.198: D/AndroidRuntime(3977): Shutting down VM 
07-20 13:11:14.198: W/dalvikvm(3977): threadid=1: thread exiting with uncaught exception (group=0x40fb2930) 
07-20 13:11:14.208: E/AndroidRuntime(3977): FATAL EXCEPTION: main 
07-20 13:11:14.208: E/AndroidRuntime(3977): java.lang.UnsatisfiedLinkError: Native method not found: org.opencv.core.Mat.n_Mat:()J 
07-20 13:11:14.208: E/AndroidRuntime(3977):  at org.opencv.core.Mat.n_Mat(Native Method) 
07-20 13:11:14.208: E/AndroidRuntime(3977):  at org.opencv.core.Mat.<init>(Mat.java:24) 
07-20 13:11:14.208: E/AndroidRuntime(3977):  at org.opencv.samples.tutorial1.Tutorial1Activity.<init>(Tutorial1Activity.java:32) 
07-20 13:11:14.208: E/AndroidRuntime(3977):  at java.lang.Class.newInstanceImpl(Native Method) 
07-20 13:11:14.208: E/AndroidRuntime(3977):  at java.lang.Class.newInstance(Class.java:1319) 
07-20 13:11:14.208: E/AndroidRuntime(3977):  at android.app.Instrumentation.newActivity(Instrumentation.java:1071) 
07-20 13:11:14.208: E/AndroidRuntime(3977):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2171) 
07-20 13:11:14.208: E/AndroidRuntime(3977):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2309) 
07-20 13:11:14.208: E/AndroidRuntime(3977):  at android.app.ActivityThread.access$700(ActivityThread.java:157) 
07-20 13:11:14.208: E/AndroidRuntime(3977):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289) 
07-20 13:11:14.208: E/AndroidRuntime(3977):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-20 13:11:14.208: E/AndroidRuntime(3977):  at android.os.Looper.loop(Looper.java:176) 
07-20 13:11:14.208: E/AndroidRuntime(3977):  at android.app.ActivityThread.main(ActivityThread.java:5317) 
07-20 13:11:14.208: E/AndroidRuntime(3977):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-20 13:11:14.208: E/AndroidRuntime(3977):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-20 13:11:14.208: E/AndroidRuntime(3977):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
07-20 13:11:14.208: E/AndroidRuntime(3977):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
07-20 13:11:14.208: E/AndroidRuntime(3977):  at dalvik.system.NativeStart.main(Native Method) 

其在3.0的工作,如果我这样做

gray = inputFrame.gray(); 

    Imgproc.Canny(gray, cany, 225, 250, 3, true); 

    return cany; 

将其更改为

gray = inputFrame.gray(); 

    return gray; 

任何帮助

回答

0

只是使输入垫和输出 大小和类型,当相机启动 这样

public void onCameraViewStarted(int width, int height) { 
cany= new Mat(height, width, CvType.CV_8UC4); 
} 

public void onCameraViewStopped() { 
    cany.release(); 
} 

// OnCameraFrame

Imgproc.Canny(inputFrame.gray(), cany, 220, 250); 
    return cany; 
+0

感谢它的工作:)) –