当前位置: 首页 > 面试题库 >

如何在OpenCV Java API中将MatOfPoint转换为MatOfPoint2f

燕涵容
2023-03-14
问题内容

我正在尝试 通过使用opencv java api
实现以下问题的示例代码 。为了findContours(gray, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);用Java
实现,我使用了这种语法Imgproc.findContours(gray, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);

因此,现在轮廓应为List<MatOfPoint> contours = newArrayList<MatOfPoint>();而不是vector<vector<cv::Point> > contours;

然后我需要实现这个approxPolyDP(Mat(contours[i]), approx, arcLength(Mat(contours[i]),true)*0.02, true);。在java
api中,Imgproc.approxPolyDP将参数接受为approxPolyDP(MatOfPoint2f curve, MatOfPoint2f approxCurve, double epsilon, boolean closed)。我如何将MatOfPoint转换为MatOfPoint2f?

或者有没有办法使用与c ++接口相同的向量来实现这一点。任何建议或示例代码将不胜感激。


问题答案:

MatOfPoint2f与MatOfPoint的不同之处仅在于元素的类型(分别为32位浮点型和32位int)。可行的选择(尽管会降低性能)是创建MatOfPoint2f实例并将其元素(循环)设置为等于源MatOfPoint的元素。

 public void fromArray(Point... lp);
 public Point[] toArray();

这两个类中的方法。

所以你可以做

 /// Source variable
 MatOfPoint SrcMtx;

 /// New variable
 MatOfPoint2f  NewMtx = new MatOfPoint2f( SrcMtx.toArray() );


 类似资料:
  • 问题内容: 我是Java的新手,想知道double转换为int cast如何工作吗?我知道,只需将低32位转换为int就很容易了,但是将double(64位)转换为int(32位)呢?来自二进制的double中的那64位是Double- precision浮点格式(Mantissa),那么它如何在内部转换为int? 问题答案: 所有这些都记录在JLS的5.1.3节中。 第一步,将浮点数转换为lon

  • 问题内容: 我一直在这里找到问题,并且Google的人们遇到了麻烦,而不是遇到了其他麻烦。但我敢肯定,我不是以前已经从去碰到这种情况的唯一一个到。 我发现的唯一其他答案是“首先将其设置为Long”,这实际上并没有解决这个问题。 我最初尝试投射,但得到了“ ” 如您所料,我有点困惑,我被困住了,因为有些内容以形式出现,而我要存储其信息的实体要求序列号为Long。 问题答案: 请注意,强制转换为和强制

  • 问题内容: 以下是我的json文件输入 码 输出量 因此,在这里我确实得到了答案,但是没有打印一次,而是打印了7次。如何解决此问题。 问题答案: 是一个字典,您不需要对其进行迭代。您可以使用键直接访问值。 例如:

  • 问题内容: 我们如何在Java中转换成?我有一个要求,我们必须使用Double作为参数,但是我们越来越明白了,所以我必须转换成。 问题答案: 您需要使用该方法从BigDecimal对象获取double值。

  • 问题内容: 我想转换成JavaScript,该怎么办? 我一直在寻找它,但没有发现任何东西。 所以, 1px→? 大众 谢谢。 问题答案: 1px =(100vw / [document.documentElement.clientWidth] px) 例如-如果您的视口很宽(按定义等于),则 1px =(100vw / 500px)= 0.2vw 我曾经以排除任何滚动条的计算

  • 问题内容: (我是Java编程的新手) 我有例如: 我需要在撇号中得到数字9本身。我尝试执行以下操作 但这没用。 那么我该怎么做才能得到撇号呢? 问题答案: ASCII表的排列方式是使字符的值比的值大九;字符的值比的值大8 ; 等等。 因此,您可以通过减去以获得十进制数字char的int值。