使用opencv在android中裁剪图像
问题描述:
我在android中使用OpenCV 2.3.1。我需要将图像裁剪成一半。 我在做什么是使用opencv在android中裁剪图像
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包中找到它。
答
有一些Mat类的构造函数,其中一个需要Mat和ROI(感兴趣的区域)。
这里是如何做到这一点在Android中/ Java的:
Mat uncropped = getUncroppedImage();
Rect roi = new Rect(x, y, width, height);
Mat cropped = new Mat(uncropped, roi);
答
我一直做裁剪这种方式:
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
感谢您的帮助。如果我使用Mat裁剪进行特征检测而无需克隆它输出。 opencv会在裁剪部分或完整图像中查找特征吗? – akniazi
答
似乎cv::getRectSubPix做你想做的。另外,您不必分配比您需要的更多空间。如果裁剪区域没有对准确切的像素,它也需要插值。
这应该做你想做的。输入类型将是输出类型。
Mat dst;
getRectSubPix(src, Size(src.rows()/2,src.cols()), Point2f(src.rows()/4, src.cols()/2), dst);
您是否尝试过做它,你上面提出的方式,它没有工作? –