Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

How to convert Floating point image to 32-bit single-channel?

I'm doing a watershed segmentation and the marker image is derived from the source image put through a distance transform. The distance transform returns a floating point image (I have no idea about the bit-depth) and I have trouble putting it through the watershed method since it requires a 32 bit single channel image.

Can I use the mat's convertTo method to set the bit depth to 32? I also have trouble trying to display the floating point image since the matToBitmap() method doesn't seem to accept them.

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

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

    //Marker image for watershed
    Imgproc.distanceTransform(mThresh, mDist, Imgproc.CV_DIST_L2, Imgproc.CV_DIST_MASK_PRECISE);

    //Conversions for watershed
    Imgproc.cvtColor(mThresh, mThresh, Imgproc.COLOR_GRAY2BGR, 3);

    //Floating-point image -> 32-bit single-channel
    mDist.convertTo(...);

    Imgproc.watershed(mThresh, mDist); //

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


    Utils.matToBitmap(mThresh, bmpOut);
    imgView.setImageBitmap(bmpOut);
click to hide/show revision 2
retagged

How to convert Floating point image to 32-bit single-channel?

I'm doing a watershed segmentation and the marker image is derived from the source image put through a distance transform. The distance transform returns a floating point image (I have no idea about the bit-depth) and I have trouble putting it through the watershed method since it requires a 32 bit single channel image.

Can I use the mat's convertTo method to set the bit depth to 32? I also have trouble trying to display the floating point image since the matToBitmap() method doesn't seem to accept them.

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

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

    //Marker image for watershed
    Imgproc.distanceTransform(mThresh, mDist, Imgproc.CV_DIST_L2, Imgproc.CV_DIST_MASK_PRECISE);

    //Conversions for watershed
    Imgproc.cvtColor(mThresh, mThresh, Imgproc.COLOR_GRAY2BGR, 3);

    //Floating-point image -> 32-bit single-channel
    mDist.convertTo(...);

    Imgproc.watershed(mThresh, mDist); //

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


    Utils.matToBitmap(mThresh, bmpOut);
    imgView.setImageBitmap(bmpOut);