0
私はOpenCVを使って新しく、Canny検出器を適用しようとするとアプリケーションがクラッシュします。私は同じことについて別の投稿を見ましたが、私はそれを試して何もしなかった...AndroidアプリでOpencv cannyエッジ検出がクラッシュする
私はAndroidスタジオ3.0、OpenCV 3.2.0を使用し、私の携帯電話はAndroid 6.0.1です。
これは私のコードです。私はたくさんの組み合わせを試して、Canny検出器を適用しようとすると常に失敗します。最後の方法で注意を払ってくださいonCameraFrame ...それはキャニーでRGBAとグレー画像の両方で完璧に動作しますが、ありません:それは、画像をキャッチしにそれを保存することが可能です場合
public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2{
private static String TAG = "MainActivity";
JavaCameraView javaCameraView;
Mat mRgba, imgGray, imgCanny, wide;
BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status){
switch(status){
case BaseLoaderCallback.SUCCESS:{
javaCameraView.enableView();
break;
}
default:{
super.onManagerConnected(status);
break;
}
}
}
};
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
javaCameraView = (JavaCameraView) findViewById(R.id.java_camera_view);
javaCameraView.setVisibility(SurfaceView.VISIBLE);
javaCameraView.setCvCameraViewListener(this);
}
@Override
protected void onPause(){
super.onPause();
if(javaCameraView!=null)
javaCameraView.disableView();
}
@Override
protected void onDestroy(){
super.onDestroy();
if(javaCameraView!=null)
javaCameraView.disableView();
}
@Override
protected void onResume(){
super.onResume();
if(OpenCVLoader.initDebug()){
Log.i(TAG, "Opencv loaded succesfully");
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
} else {
Log.i(TAG, "Opencv not loaded");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_2_0, this, mLoaderCallback);
}
}
@Override
public void onCameraViewStarted(int width, int height) {
mRgba = new Mat (height, width, CvType.CV_8UC4);
imgGray = new Mat (height, width, CvType.CV_8UC1);
imgCanny = new Mat (height, width, CvType.CV_8UC1);
}
@Override
public void onCameraViewStopped() {
mRgba.release();
}
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
imgGray = inputFrame.gray();
//mRgba = inputFrame.rgba();
//Imgproc.cvtColor(mRgba, imgGray, Imgproc.COLOR_RGB2GRAY);
Imgproc.Canny(imgGray, imgCanny, 50, 150); //detector canny
return imgCanny;
}
}
は私も知りたいですギャラリー。おそらくonTouchメソッドを使っていますか?どうもありがとうございました!
エラーメッセージはありますか? – Bhoke