使用opencv在Android中裁剪图像

时间:2011-11-03 21:18:29

标签: android image-processing opencv

我在Android中使用OpenCV 2.3.1。我需要将图像裁剪成一半。 我在做的是:

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

第三步是完成工作还是我必须添加更多内容? 我在opencv 2.3文档中看到了Mat :: operator(),但遗憾的是无法在opencv Android软件包中找到它。

3 个答案:

答案 0 :(得分:19)

Mat类有一些构造函数,其中一个构造函数采用Mat和ROI(感兴趣的区域)。

以下是如何在Android / Java中执行此操作:

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

答案 1 :(得分: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();

希望有所帮助!

答案 2 :(得分:0)

似乎cv::getRectSubPix做你想要的。此外,您不必分配超出您需要的空间。如果裁剪区域没有在精确像素上对齐,它也会进行必要的插值。

这应该做你想要的。输入类型将是输出类型。

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