gpt4 book ai didi

java - 如何使用 OpenCv 模糊矩形

转载 作者:行者123 更新时间:2023-12-02 05:17:14 28 4
gpt4 key购买 nike

有没有办法在 OpenCv(适用于 Android)中模糊 Mat 对象,以便模糊包含在 Rect 对象中?我正在做一个面部模糊应用程序并尝试过这个:

Mat mat = ...; // is initialized properly to 480*640

...

Mat blurred = new Mat();
for (Rect rect : faceDetections.toArray()) {
int xStart = Math.max(0, rect.x);
int yStart = Math.max(0, rect.y);

Imgproc.blur(mat, blurred, new Size(rect.width/2, rect.height/2), new Point(xStart, yStart));

Core.rectangle(blurred, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
new Scalar(0, 255, 0));
}

如果我注释掉 Imgproc.blur 部分,那么它可以通过在脸部周围绘制矩形来正常工作。但是,当我使用此行运行它时,我在日志中收到以下内容:

11-07 17:27:54.100: E/AndroidRuntime(25665): Caused by: CvException [org.opencv.core.CvException: cv::Exception: /hdd2/buildbot/slaves/slave_ardbeg1/50-SDK/opencv/modules/imgproc/src/filter.cpp:182: error: (-215) 0 <= anchor.x && anchor.x < ksize.width && 0 <= anchor.y && anchor.y < ksize.height in function void cv::FilterEngine::init(const cv::Ptr<cv::BaseFilter>&, const cv::Ptr<cv::BaseRowFilter>&, const cv::Ptr<cv::BaseColumnFilter>&, int, int, int, int, int, const Scalar&)

这意味着 anchor 超出了范围,但我查了一下 the (0,0) point for open CV is the upper left point所以我认为它不应该超出范围。

此外,理想情况下,我想在该区域中进行高斯模糊(而不仅仅是模糊),但我也不知道如何将其限制在矩形中:它总是模糊整个图像。

Link to ImgProc docs 。非常感谢任何帮助!

最佳答案

好吧,我知道该怎么做了:

Mat mask = blurred.submat(rect);
Imgproc.GaussianBlur(mask, mask, new Size(55, 55), 55); // or any other processing

然后模糊就会得到模糊区域。这是因为 submat 不会复制模糊中的数据,而是引用它,因此当应用模糊时,它只会模糊蒙版引用的模糊部分。

关于java - 如何使用 OpenCv 模糊矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26822413/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com