Обрезка изображения в Android с помощью opencv - PullRequest
14 голосов
/ 04 ноября 2011

Я использую OpenCV 2.3.1 в Android. Мне нужно обрезать изображение пополам. То, что я делаю, это:

    Mat mIntermediateMat2 = new Mat(frame_height,frame_width,rgba.type);
    mIntermediateMat2 = rgba.clone();
    mIntermediateMat2 = mIntermediateMat2.rowRange(0,frame_height/2);

Будет ли третий шаг делать работу, или я должен добавить что-то еще? Я видел Mat :: operator () в документации opencv 2.3, но, к сожалению, не смог найти его в пакете opencv Android.

Ответы [ 3 ]

19 голосов
/ 04 ноября 2011

Существует несколько конструкторов для класса Mat, один из которых использует Mat и ROI (область интереса).

Вот как это сделать в Android / Java:

Mat uncropped = getUncroppedImage();
Rect roi = new Rect(x, y, width, height);
Mat cropped = new Mat(uncropped, roi);
2 голосов
/ 04 ноября 2011

Я всегда делал обрезку таким образом:

Mat image = ...; // fill it however you want to
Mat crop(image, Rect(0, 0, image.cols, image.rows / 2)); // NOTE: this will only give you a reference to the ROI of the original data

// if you want a copy of the crop do this:
Mat output = crop.clone();

Надеюсь, это поможет!

0 голосов
/ 04 ноября 2011

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

Это должно делать то, что вы хотите.Тип ввода будет типом вывода.

Mat dst;
getRectSubPix(src, Size(src.rows()/2,src.cols()), Point2f(src.rows()/4, src.cols()/2), dst);
...