java - 在Java中将位图转换为mat以进行图像处理

标签 java android opencv bitmap mat

您好,我想在我的 Java Android 项目中使用 openCV 进行图像处理。所以现在我在读取图像文件并将其转换为 mat 时遇到问题。我试过直接读取图像并将其作为 Mat 读取,但仍然不起作用:

//get image source from folder
    String imgPath =  Environment.getExternalStorageDirectory().toString() + "/SimpleAndroidOCR/ocr.jpg";
    Mat sourceImage = Imgcodecs.imread(imgPath);

然后我尝试获取位图并将其转换为 Mat 但仍然不起作用:

Bitmap bitmap1 = BitmapFactory.decodeFile(_path, options);
Mat sourceImage = new Mat();
Utils.bitmapToMat(bitmap1 , sourceImage);

谁能告诉我我做错了什么? 提前致谢

最佳答案

我找到了解决我自己问题的方法。 我指的是这个 Android & OpenCV : Utils.bitmapToMat crashes其中提到我们需要加载库才能使用 openCV 相关代码 这是我加载库的代码:

 private BaseLoaderCallback mLoaderCallBack = new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(int status) {
        if(status == LoaderCallbackInterface.SUCCESS){

        }else{
            super.onManagerConnected(status);
        }

    }
};

public void onResume(){
    super.onResume();
    OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_1_0, this, mLoaderCallBack);
}

请注意,您应该更改 opencv 版本以匹配您使用的版本。

为了将位图转换为垫子,我指的是这个 https://groups.google.com/forum/#!topic/android-opencv/8EoxpTb4W3E bitmaptomat 仅在我们具有适当的位图格式(即 ARGB_8888)时才有效 这是我的代码:

    private Bitmap JPGtoRGB888(Bitmap img){
        Bitmap result = null;

        int numPixels = img.getWidth() * img.getHeight();
        int[] pixels = new int[numPixels];

//        get jpeg pixels, each int is the color value of one pixel
        img.getPixels(pixels,0,img.getWidth(),0,0,img.getWidth(),img.getHeight());

//        create bitmap in appropriate format
        result = Bitmap.createBitmap(img.getWidth(),img.getHeight(), Bitmap.Config.ARGB_8888);

//        Set RGB pixels
        result.setPixels(pixels, 0, result.getWidth(), 0, 0, result.getWidth(), result.getHeight());

        return result;
    }

这里会调用这个函数

Bitmap bmp32 = JPGtoRGB888(bitmap);
Mat sourceImage = new Mat();
Utils.bitmapToMat(bmp32, sourceImage);

然后就可以处理sourceImage了 希望这有帮助 干杯!

关于java - 在Java中将位图转换为mat以进行图像处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36394368/

相关文章:

java - 实现者名单?

Java EE 与 Java SE : version mismatch?

Android 复选框 ui 更改

java - AES CBC PKCS5Padding Java 到 Ruby

javascript - 如何将图像从 Flask 服务器发送到前端的 JavaScript 显示?

c++ - 使用 OpenCV 2.4.3 的双线性插值的 VideoCapture 旋转

java - 从 Activity 目录获取帐户到期日期

java - HttpURLConnection 被锁定

android - 如何清除保存的实例数据?

opencv - Opencv中如何获取颜色格式?