2016-09-18 3 views
-1

私はopenCV android image processingの新機能です。しかし、私はいくつかの問題に直面しています。私はアンドロイドでOpenCVのを使用して、私はマットを使用するときに、私のアプリは押しつぶさます....これに伴う問題は.....openCv Matを使用しているときに私のアプリケーションが壊れている理由

私のコードはここで何です..:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    ImageView img=(ImageView) findViewById(R.id.imageView); 

    Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.in); 

    Mat tmp = new Mat (b.getWidth(), b.getHeight(), CvType.CV_8UC1); 
    Utils.bitmapToMat(b, tmp); 
    Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_RGB2GRAY); 
     //there could be some processing 
    Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_GRAY2RGB, 4); 
    Utils.matToBitmap(tmp, b); 
    img.setImageBitmap(b); 

} 
+0

最小限のコード例を提供するために、いくつかのコード行をコメントアウトしてください。どのラインがクラッシュを引き起こしていますか? –

答えて

0

  1. Matコンストラクタは、高さと幅を逆にしています。

  2. CV_8UC1は、単一チャネル(グレースケール)です。したがって、事前にマットを作成する必要がある場合は、適切なチャンネル数のマットを作成する必要があります。 RGB画像を使用したいと思うので、CV_8UC3を使用してください。しかし、通常、サイズが合わない場合、関数はMatを再割り当てします。これがbitmapToMatの場合でも、別の問題があります。

  3. Afaik、androidは標準色空間としてRGBAを使用します。だから、おそらくUtils.bitmapToMat(b, tmp);の後にtmpは4チャンネルのRGBAマトリックスです。チェックが失敗した場合は、if Mat.channels isn't 3, don't try to convert RGB2GRAYのようなチェックを追加する必要があるかどうかわからない場合は、Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_RGBA2GRAY);以降を試してみてください。チャンネルの実際の数とその理由を調べることができます。

関連する問題