Python中文网

一个关于 编程问题的解答网站.

有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何用OpenCv模糊矩形

有没有办法在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&)

这意味着锚点超出了边界,但我已经查找了the (0,0) point for open CV is the upper left point,所以我认为它不应该超出边界

理想情况下,我希望在区域中进行高斯模糊(而不仅仅是模糊),但我也不知道如何将其绑定到矩形中:它总是模糊整个图像

Link to ImgProc docs。非常感谢您的帮助


共 (0) 个答案