0

私は Android バイナリを使用していますが、OpenCV で距離変換を実行するのはこれが初めてです。OpenCV 仕様では、distanceTransformの出力イメージは 32 ビット浮動小数点のシングル チャネル イメージであると規定されています。これをマット (mDist) に取得しますが、マットからビットマップを作成すると、IllegalStateException がスローされます。これは、出力とマット オブジェクトの非互換性によるものですか? マットなどのカラー チャネルの詳細を指定する必要がありますか? 以下は私のコード部分です。

ここに画像の説明を入力

        Mat mImg = new Mat();
        Mat mThresh = new Mat();
        Mat mDist = new Mat();

        ImageView imgView = (ImageView) findViewById(R.id.imageView);
        Bitmap bmpIn = BitmapFactory.decodeResource(getResources(),
                R.drawable.w1);    
        Utils.bitmapToMat(bmpIn, mImg); //Load image to mat

        Imgproc.cvtColor(mImg, mImg, Imgproc.COLOR_BGR2GRAY);    
        Imgproc.threshold(mImg, mThresh, 0, 255, Imgproc.THRESH_BINARY
                | Imgproc.THRESH_OTSU); //Grayscale and thresholding        

        Imgproc.distanceTransform(mThresh, mDist, Imgproc.CV_DIST_L2, Imgproc.CV_DIST_MASK_PRECISE);

        Bitmap bmpOut = Bitmap.createBitmap(mDist.cols(), mDist.rows(),
                Bitmap.Config.ARGB_8888);   

        Utils.matToBitmap(mDist, bmpOut); //Error in creating bitmap
        imgView.setImageBitmap(bmpOut);
4

1 に答える 1

0

障害は次のコード行にありました。

Bitmap bmpOut = Bitmap.createBitmap(mDist.cols(), mDist.rows(),
                Bitmap.Config.ARGB_8888); 

適用すべき Bitmap.Config が ARGB_8888 ではありませんでした。この関数は、8 ビットのシングル チャネル マットを作成します。

于 2013-02-11T12:24:29.763 に答える