2012-06-06 2 views
0

Я mRgba Matrix and a Rect r (что-то признается в кадре)OpenCV андроид ява матрица подматрицы (ROI Область интересов)

Я хочу подматрицы этой части кадра, которая определяется по Rect r.

, когда я использую это так:

sub = mRgba.submat(r);

я получить право подматрицы, но у меня проблема со следующими шагами, я хочу изменить эту часть кадра, а затем скопировать его обратно к оригиналу.

Например:

Imgproc.cvtColor(sub, sub, Imgproc.COLOR_RGBA2GRAY, 1); //make it gray 
Imgproc.cvtColor(sub, sub, Imgproc.COLOR_GRAY2RGBA, 4); //change to rgb 

Как скопировать эту измененную подматрицу назад к оригиналу. или как я могу получить/создать маску такого же размера, как mRgba со всеми нулями, кроме части Rect r?

ответ

0
sub = mRgba.submat(r); 

Imgproc.cvtColor(sub, sub, Imgproc.COLOR_RGBA2GRAY, 1); //make it gray 
Imgproc.cvtColor(sub, sub, Imgproc.COLOR_GRAY2RGBA, 4); //change to rgb 

sub.copyTo(mRgba.submat(r)); 

нормально это, кажется, делает трюк :) копирует измененный Subpicture/Матричные назад в области источника .. (то, что обычно делается с setROI и copyto)

+0

Другое дело, если вы хотите скопировать два подкласса 'a',' b' из разных источников 'A',' B', важно, чтобы 'A' и' B' имели один и тот же тип (например, 'CV_32F ') – auraham

0

Ваш код не работает так, как вы ожидали, потому что невозможно изменить количество цветов на месте. Вам нужна временная матрица, чтобы сделать его работу:

Mat tmp; 
Imgproc.cvtColor(sub, tmp, Imgproc.COLOR_RGBA2GRAY); //make it gray 
Imgproc.cvtColor(tmp, sub, Imgproc.COLOR_GRAY2RGBA); //change to rgb 
+0

привет .. thx для вашего ответа .. на самом деле это не проблема и/или ничего не меняет. - единственный способ сделать маску шаг за шагом с помощью петель? – ddd

+0

sub.copyTo (mRgba.submat (r)); ОК, похоже, это трюк :) он копирует измененную субтитра/матрицу обратно в область исходного изображения. – ddd