Сохранение Mat из OpenCV в память смартфона

В настоящее время у меня возникают трудности с сохранением растровых изображений в Android. Я работаю над системой, которая определяет область глаз человека. У меня есть этот код, который сохраняет ROI на мат в opencv.

Rect eyearea_right = new Rect( RectOfFace.x + RectOfFace.width / 16 ,
                    (int) (RectOfFace.y + (RectOfFace.height / 4.5)) ,
                    (RectOfFace.width - 2 * RectOfFace.width / 16) / 2,
                    (int) (RectOfFace.height / 3.0)
            );

ROI = new Mat(mGray, eyearea_left);
                Bitmap bm = Bitmap.createBitmap((int) ROI.size().width, (int) ROI.size().height, Bitmap.Config.ARGB_8888);

Однако у меня возникли трудности с сохранением его в памяти телефона. Мне нужно увидеть изображение или растровое изображение, чтобы я знал, как я буду обрабатывать изображение, чтобы определить, закрывает ли человек глаза. Кроме того, есть ли способ распечатать/отобразить растровое изображение, полученное из мата в OpenCV, на экране? Спасибо.

Это код для сохранения, который я нашел в Интернете

String root = Environment.getExternalStorageDirectory().toString();
                File myDir = new File(root + "/saved_images");
                Log.i("Bitmap", root);
                myDir.mkdirs();
                int n = i;
                String path = Environment.getExternalStorageDirectory().toString();

                OutputStream fOut = null;
                File file = new File(path, "/saved_images/" + "image" + i + ".jpg");
                fOut = new FileOutputStream(file);

                bm.compress(Bitmap.CompressFormat.JPEG, 85, fOut);
                fOut.flush();
                fOut.close();

                MediaStore.Images.Media.insertImage(getContentResolver()
                        , file.getAbsolutePath(), file.getName(), file.getName());

person xiotee    schedule 24.11.2015    source источник
comment
В чем у вас трудности с сохранением.   -  person Huá dé ní 華得尼    schedule 24.11.2015
comment
Я скопировал блок кода из интернета. Он сохраняет растровое изображение в виде файла jpg. Однако он сохраняет только черное изображение. Я отредактировал описание выше и добавил код для сохранения изображения.   -  person xiotee    schedule 24.11.2015


Ответы (2)


Вы создаете растровое изображение да. Но это не имеет ничего общего с ROI. Снимаются только размеры. Не содержание. Так что он пустой.

person greenapps    schedule 24.11.2015
comment
Спасибо за ответ, greenapps. Могу я спросить, как мне получить изображение, ограниченное прямоугольником? Спасибо. - person xiotee; 25.11.2015
comment
Без понятия. Не знаю Мат. - person greenapps; 25.11.2015
comment
Ok. Спасибо. Я подумал, что у вас может быть идея, как это сделать. - person xiotee; 25.11.2015

Я нашел ответ на свою проблему. По сути, вам нужно использовать функцию субмата, чтобы получить часть мата. Submat — это функция, доступная в классе Mat.

person xiotee    schedule 27.11.2015