【问题标题】:Cropping image in Android using opencv使用opencv在Android中裁剪图像
【发布时间】:2011-12-21 13:36:12
【问题描述】:

我在 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 包中找不到。

【问题讨论】:

  • 您是否尝试过按照上面建议的方式进行操作,但没有成功?

标签: android image-processing opencv


【解决方案1】:

我一直都是这样裁剪的:

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

希望有帮助!

【讨论】:

  • 感谢您的帮助。如果我使用 Mat 裁剪进行特征检测而不将其克隆到输出。 opencv 会在裁剪部分还是在完整图像中寻找特征?
【解决方案2】:

似乎cv::getRectSubPix 做你想做的事。另外,您不必分配比您需要的更多的空间。如果裁剪区域未在精确像素上对齐,它也会进行必要的插值。

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

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

【讨论】:

    【解决方案3】:

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

    以下是在 Android/Java 中的操作方法:

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

    【讨论】:

    • 只是为了澄清投资回报率。 x,y 是要设置为 roi 的矩形的起始位置,width - height 是矩形的宽 - 高。它不是图像宽度 - 高度。例如,如果您有一张 320*240 的图片,并且想要将该图片拆分为 2 张新图片。第一个 roi 将是 Rect roi = new Rect(0, 0, width/2, height);第二个 Rect roi = new Rect(160, 0, width/2, height);
    • idk 为什么但是这个逻辑给了我例外
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    相关资源
    最近更新 更多