Android中使用opencv裁剪图像

发布于 2024-12-13 14:02:20 字数 360 浏览 1 评论 0原文

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

I am using OpenCV 2.3.1 in Android. I need to crop the image into half.
What I am doing is:

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

Will the third step do the job or I have to add something more?
I saw Mat::operator() in opencv 2.3 documentation but unfortunately not able to find in the opencv Android package.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

花开浅夏 2024-12-20 14:02:20

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

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

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

There are a few constructors for the Mat class, one of which takes a Mat and an ROI (region of interest).

Here's how to do it in Android/Java:

Mat uncropped = getUncroppedImage();
Rect roi = new Rect(x, y, width, height);
Mat cropped = new Mat(uncropped, roi);
终难愈 2024-12-20 14:02:20

我一直都是这样裁剪的:

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

希望有帮助!

I have always done cropping this way:

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

Hope that helps!

︶ ̄淡然 2024-12-20 14:02:20

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

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

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

Seems cv::getRectSubPix does what you want. Plus you don't have to allocate more space than you need. Also it does necessary interpolations if the cropped area is not aligned over an exact pixel.

This should do what you want. Input type will be the output type.

Mat dst;
getRectSubPix(src, Size(src.rows()/2,src.cols()), Point2f(src.rows()/4, src.cols()/2), dst);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文