,当发生错误时

发布时间:2025-06-24 19:03:28  作者:北方职教升学中心  阅读量:934


bitmap2.recycle()。, 。, 。显示错误的信息 } } private Bitmap loadBitmapFromResource(int resourceId) { InputStream inputStream = getResources().openRawResource(resourceId); try { return BitmapFactory.decodeStream(inputStream); } catch (Exception e) { Log.e(TAG, "资源加载失败#34;, e); return null; } finally { try { inputStream.close(); } catch (IOException e) { Log.e(TAG, "关闭失败", e); } } } private Mat convertBitmapToMat(Bitmap bitmap) { Mat mat = new Mat(); Utils.bitmapToMat(bitmap, mat); return mat; } private Bitmap convertMatToBitmap(Mat mat) { Bitmap bitmap = Bitmap.createBitmap(mat.cols(), mat.rows(), Bitmap.Config.ARGB_8888); Utils.matToBitmap(mat, bitmap); return bitmap; } private Mat stitchImages(Mat mat1, Mat mat2) { if (mat1.rows() != mat2.rows()) { Log.e(TAG, "图像高度不一致󿀌不能拼接"); return null; } List<Mat> mats = new ArrayList<>(); mats.add(mat1); mats.add(mat2); Mat stitchedMat = new Mat(); Core.hconcat(mats, stitchedMat); return stitchedMat; }}。, 。 即使出现错误,它只会打印日志并停止执行,不会导致应用程序崩溃。

  • 错误处理:。 和 。 使用 。 在 。 记住,在处理大型图像时,特别要注意内存管理󿀌避免内存溢出 (OOM) 错误。

     必要条件。convertMatToBitmap。R.drawable.image1。,当发生错误时, 函数从资源加载图片,并进行错误处理。mat2.release()。代码说明:。图像高度不一致等。 获取其引用。stitchImages。。 为您提供实际的图像资源 ID。

这个改进后的代码更强大,运行时可以更好地避免崩溃,并提供更清楚的错误信息。

  • 类型转换:。Bitmap 到 Mat 转换失败、
  • 确保您的项目已正确配置 OpenCV 库。
  • 资源释放:。Core.hconcat。

    import org.opencv.android.Utils;import org.opencv.core.Core;import org.opencv.core.CvType;import org.opencv.core.Mat;import org.opencv.imgcodecs.Imgcodecs;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.util.Log;import android.widget.ImageView;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;public class ImageStitchingActivity extends AppCompatActivity {    private static final String TAG = "ImageStitchingActivity";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main); // 您的布局文件        ImageView imageView = findViewById(R.id.imageView); // 你的Imageviewe        try {            Bitmap bitmap1 = loadBitmapFromResource(R.drawable.image1); // 用你的资源ID代替            Bitmap bitmap2 = loadBitmapFromResource(R.drawable.image2); // 用你的资源ID代替            if (bitmap1 == null || bitmap2 == null) {                Log.e(TAG, "图像加载失败#34;);                return;            }            Mat mat1 = convertBitmapToMat(bitmap1);            Mat mat2 = convertBitmapToMat(bitmap2);            if (mat1 == null || mat2 == null) {                Log.e(TAG, "Bitmap 转 Mat 失败");                return;            }            Mat stitchedMat = stitchImages(mat1, mat2);            if (stitchedMat == null) {                Log.e(TAG, "图像拼接失败#34;);                return;            }            Bitmap stitchedBitmap = convertMatToBitmap(stitchedMat);            if (stitchedBitmap == null) {                Log.e(TAG, "Mat 转 Bitmap 失败");                return;            }            imageView.setImageBitmap(stitchedBitmap);            // 释放资源            mat1.release();            mat2.release();            stitchedMat.release();            bitmap1.recycle();            bitmap2.recycle();        } catch (Exception e) {            Log.e(TAG, "拼接过程中出现错误: " + e.getMessage());            // 处理异常󿀌例如,

    代码说明:。

  • 高度一致性检查:。convertBitmapToMat。stitchedMat.release()。mat1.release()。
  • 使用前请注意:

    • 替换 。,并在代码中使用 。loadBitmapFromResource。
    • 图像加载:。ImageView。findViewById。

       API说明:

      ///垂直拼接󿀌所有图片的宽度都需要相同的Core.vconcat();///横向拼接󿀌所有图片的高度都需要相同的Core.hconcat();


      Android OpenCV-CSDN博客集成。
       和 。bitmap1.recycle()。打印日志信息并返回,避免程序崩溃。

    • 在您的布局文件中添加一个 。 。, 。 函数封装了 Bitmap 和 Mat 之间的转换,提高代码的可读性和可维护性。= mat2.rows()) { Log.e(TAG, "图像高度不一致󿀌不能拼接"); return null; } List<Mat> mats = new ArrayList<>(); mats.add(mat1); mats.add(mat2); Mat stitchedMat = new Mat(); Core.hconcat(mats, stitchedMat); return stitchedMat; }}。R.drawable.image2。 ࿰在函数中c;添加输入图像高度是否一致的检查,这是 。 这些句子用于释放资源󿀌防止内存泄漏。 在代码中添加了大量的错误检查,例如图像加载失败, 。