Java 将矩形提取到新材质并转换为位图

Java 将矩形提取到新材质并转换为位图,java,opencv,opencv4android,opencv3.1,Java,Opencv,Opencv4android,Opencv3.1,我想将图像中的矩形提取到new Mat()并用这个ROI填充它。我尝试过,但在将Mat转换为位图后,图像已损坏 OpenCV.Core.Rect ROI = new OpenCV.Core.Rect(leftX, leftTopY, 600, 200); Mat croppedImage = new Mat(digitsMask, ROI); digitsMask.CopyTo(croppedImage); 以上是将ROI提取到新Mat的代码 Utils.BitmapToMat(bitmap,

我想将图像中的矩形提取到new Mat()并用这个ROI填充它。我尝试过,但在将Mat转换为位图后,图像已损坏

OpenCV.Core.Rect ROI = new OpenCV.Core.Rect(leftX, leftTopY, 600, 200);
Mat croppedImage = new Mat(digitsMask, ROI);
digitsMask.CopyTo(croppedImage);
以上是将ROI提取到新Mat的代码

Utils.BitmapToMat(bitmap, imageMat);
cuttedImage = FilterBitmap(imageMat);
Bitmap newBitmap = Bitmap.CreateBitmap((int)cuttedImage.Size().Width, (int)cuttedImage.Size().Height, Bitmap.Config.Argb8888);
Utils.MatToBitmap(cuttedImage, newBitmap);
下面是Mat和位图之间的转换。有什么解决办法吗

在将数据复制到目标矩阵之前,该函数会重新分配目标矩阵。要制作深度复制,请使用

免责声明:这是未经测试的代码

// create ROI
OpenCV.Core.Rect ROI = new OpenCV.Core.Rect(leftX, leftTopY, 600, 200);
// deep copy ROI to new image
Mat croppedImage = (new Mat(digitsMask, ROI)).clone();
// create bitmap
Bitmap bmp = null;
// create a new 4 channel Mat because bitmap is ARGB
Mat tmp = new Mat (croppedImage.rows(), croppedImage.cols(), CvType.CV_8U, new Scalar(4));
// convert ROI image from single channel to 4 channel
Imgproc.cvtColor(croppedImage, tmp, Imgproc.COLOR_GRAY2RGBA, 4);
// Initialize bitmap
bmp = Bitmap.createBitmap(croppedImage.cols(), croppedImage.rows(), Bitmap.Config.ARGB_8888);
// convert Mat to bitmap
Utils.matToBitmap(tmp, bmp);

成功了!您的回答很有帮助,但我需要更改代码以显示位图,这是我的问题。无论如何谢谢你,我的朋友!