Перейти к содержимому
Compvision.ru
astrgan

Как перевести roi в серые полутона(android)?

Recommended Posts

Здравствуйте.

Как перевести roi в серые полутона(android)?

Пробовал так, но не получается.

public Mat onCameraFrame(CvCameraViewFrame inputFrame) {

Mat image = inputFrame.rgba();

Rect roi = new Rect(300, 50, 50, 10);

Mat sub =image.submat(roi);

Imgproc.cvtColor(sub, sub, Imgproc.COLOR_RGBA2GRAY);

sub.copyTo(image.submat(roi));

return image;

}

и так:

public Mat onCameraFrame(CvCameraViewFrame inputFrame) {

Mat image = inputFrame.rgba();

Rect roi = new Rect(300, 50, 50, 10);

Imgproc.cvtColor(image.submat(roi), image.submat(roi), Imgproc.COLOR_RGBA2GRAY);

return image;

}

P.S. самое обидное это то что раньше я знал как это делать(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пример "OpenCV Sample - image-manipulations" из OpenCV для android думаю должен помочь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо!

Появился еще вопрос:

rgbaInnerWindow.release() - это команда удаляет изображение из памяти?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Canny сделать получилось (собственно я его скопировал)

	Mat rgbaInnerWindow;


    	Mat mIntermediateMat= new Mat();

        Mat rgba = inputFrame.rgba();

        Size sizeRgba = rgba.size();

        int rows = (int) sizeRgba.height;

        int cols = (int) sizeRgba.width;


        int left = cols / 8;

        int top = rows / 8;


        int width = cols * 3 / 4;

        int height = rows * 3 / 4;


        rgbaInnerWindow = rgba.submat(top, top + height, left, left + width);

        Imgproc.Canny(rgbaInnerWindow, mIntermediateMat, 80, 90);

        Imgproc.cvtColor(mIntermediateMat, rgbaInnerWindow, Imgproc.COLOR_GRAY2BGRA, 4);

        rgbaInnerWindow.release();


        return rgba; 
А вот чернобелое неработает, не могу понять почему
Mat rgbaInnerWindow;


    	Mat mIntermediateMat= new Mat();

        Mat rgba = inputFrame.rgba();

        Size sizeRgba = rgba.size();

        int rows = (int) sizeRgba.height;

        int cols = (int) sizeRgba.width;


        int left = cols / 8;

        int top = rows / 8;


        int width = cols * 3 / 4;

        int height = rows * 3 / 4;


        rgbaInnerWindow = rgba.submat(top, top + height, left, left + width);


        Imgproc.cvtColor(rgbaInnerWindow, rgbaInnerWindow, Imgproc.COLOR_RGBA2GRAY, 1);

        rgbaInnerWindow.release();


        return rgba;

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Получилось сделать так:

    public Mat onCameraFrame(CvCameraViewFrame inputFrame) {

    	Mat rgbaInnerWindow;


    	Mat mIntermediateMat= new Mat();

        Mat rgba = inputFrame.rgba();

        Size sizeRgba = rgba.size();

        int rows = (int) sizeRgba.height;

        int cols = (int) sizeRgba.width;


        int left = cols / 8;

        int top = rows / 8;


        int width = cols * 3 / 4;

        int height = rows * 3 / 4;


        rgbaInnerWindow = rgba.submat(top, top + height, left, left + width);

        Imgproc.cvtColor(rgbaInnerWindow, mIntermediateMat, Imgproc.COLOR_RGBA2GRAY);

        Imgproc.cvtColor(mIntermediateMat, rgbaInnerWindow, Imgproc.COLOR_GRAY2BGRA);

        rgbaInnerWindow.release();


        return rgba;

}

Но вроде раньше получалось сделать это как-то по проще (меньше строк) в вер 4.2.3, хотя может просто я ошибаюсь и делал также.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×