Подтвердить что ты не робот

Кроудинг изображения в android с использованием opencv

Я использую 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, но, к сожалению, не смог найти его в пакете android для opencv.

4b9b3361

Ответ 1

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

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

Mat uncropped = getUncroppedImage();
Rect roi = new Rect(x, y, width, height);
Mat cropped = new Mat(uncropped, roi);

Ответ 2

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

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();

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

Ответ 3

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

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

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