astrgan 2 Жалоба Опубликовано February 4, 2014 Здравствуйте. Как перевести 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. самое обидное это то что раньше я знал как это делать( Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано February 4, 2014 Пример "OpenCV Sample - image-manipulations" из OpenCV для android думаю должен помочь. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
astrgan 2 Жалоба Опубликовано February 5, 2014 Спасибо! Появился еще вопрос: rgbaInnerWindow.release() - это команда удаляет изображение из памяти? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
astrgan 2 Жалоба Опубликовано February 5, 2014 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; Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
astrgan 2 Жалоба Опубликовано February 5, 2014 Получилось сделать так: 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, хотя может просто я ошибаюсь и делал также. 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах