我正在使用Android二进制文件,这是我第一次在OpenCV中执行距离转换。 OpenCV specification表示distanceTransform的输出图像是32位浮点单通道图像。我把它变成了一个mat(mDist),但是在从mat创建一个位图时它会抛出一个IllegalStateException。这是由于输出和mat对象的不兼容吗?我是否必须指定垫子或任何东西的颜色通道细节?以下是我的代码部分。
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);
答案 0 :(得分:0)
错误发生在以下代码行中;
Bitmap bmpOut = Bitmap.createBitmap(mDist.cols(), mDist.rows(),
Bitmap.Config.ARGB_8888);
应该应用的Bitmap.Config不是ARGB_8888。该函数创建一个8位单通道垫。