首页 > 解决方案 > 您可以将 MatOfRect 转换为 MatOfRect2d 吗?

问题描述

我正在尝试让这个应用程序在我的计算机上运行。我正在使用 android studios,它是用 java 编写的。我有 android studio 4.1.1 并且正在使用 OpenCV 3.4.10。

这一行有一个错误:Dnn.NMSBoxes(boxes, confidences, confThreshold, nmsThresh, indices);

其中 box 是 MatOfRect 并且应该是 MatOfRect2d 但我不知道如何转换它。

Github 链接:https ://github.com/ivangrov/Android-Deep-Learning-with-OpenCV/tree/master/%5BPart%207%5D%20Deep%20Learning%20Face%20Detection

他解释代码的 Youtube 视频:https ://www.youtube.com/watch?v=pMZsttT57Zo

标签: javaandroidkotlin

解决方案


在 OpenCV 的文档中, Dnn.NMSBoxes(..) 接受MatOfRect2d作为第一个参数Documentation。进入编程部分,第 285 行使用MatOfRect参数化。因此,将 MatOfRect 显式类型转换MatOfRect2d很重要。

为此,请在相应的行号中更改以下内容

  1. 第 217行将 List<Rect> 更改为 List<Rect2d>。
  2. 行号 261 add(new Rect2d(left,top,width,height))。
  3. 行号 277 Rect2d[] boxesArray = rects.toArray(new Rect2d[0])。
  4. 行号 285将该行替换为以下内容。

MatOfRect2d bbox = new MatOfRect2d();

bbox.fromList(rects);

MatOfRect2d 的文档

  1. 最后,在第 293 行,将Rect替换为Rect2d

希望您会发现错误消失了。

希望这有帮助!


推荐阅读