لود تصویر به صورت cv::Mat در اندروید - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

لود تصویر به صورت cv::Mat در اندروید

+1 امتیاز
سلام.چطور یک تصویر jpg را سمت اندروید به صورت Mat لود کنم و این تصویر را بفرستم سمت jni برای پردازش؟
سوال شده اردیبهشت 16, 1399  بوسیله ی ٍEydi (امتیاز 68)   5 14 16

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

شما یا تصاویرتون در resource یا داخل فلدر assets که ما ابتدا در هر دو روش تصویر را تو کلاس Bitmap لود می کنیم. تصویر را کپی کنید تو resource\drawanle میشه resource شما یا برای پروژه فلدر assets بسازید بریزید توش. 

لود از طریق resource

Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.image);

لود از طریق assets 

    public Bitmap getBitmapFromAssets(String fileName) {
        Bitmap bitmap = null;
        try {
            AssetManager asset = getResources().getAssets();
            InputStream in = asset.open(fileName);
            bitmap = BitmapFactory.decodeStream(in);
            Mat mat = new Mat();
            Bitmap bmp32 = bitmap.copy(Bitmap.Config.ARGB_8888, true);
            Utils.bitmapToMat(bmp32, mat);
            return bmp32;

        }
        catch(Exception e) {

        }


        return bitmap;
    }

روش صحیح تبدیل Bitmap به Mat

      Bitmap bmp32 = bitmap.copy(Bitmap.Config.ARGB_8888, true);
      Utils.bitmapToMat(bmp32, mat);

روش ارسال هم به راحتی می تونید آدرس Mat را با متد getNativeObjAddr دریافت که از نوع long هستش و در JNI  معادلش میشه jlong .

درسمت JNI هم به صورت زیر آدرس را به Mat تبدیل کنید.

 cv::Mat img1 = *(cv::Mat *) img1_addr;

 

پاسخ داده شده اردیبهشت 18, 1399 بوسیله ی farnoosh (امتیاز 8,362)   20 44 59
انتخاب شد اردیبهشت 22, 1399 بوسیله ی ٍEydi
...