OpenCV C++ 转换为 Java 以解决形状检测问题

2024-01-04

我们对 openCV Java 开发有点陌生,遇到了一个问题。

我们正在努力转型这段代码 https://github.com/bsdnoobz/opencv-code/blob/master/shape-detect.cpp到 Android 的 Java。

approxPolyDp 需要一个 MatOfPoint2f,其中我们有“approx”参数。不过,当我们需要在 isContourConvex 之后的 if 语句中使用相同的变量时,它需要一个 MatOfPoint。首先,原始代码使用 ArrayList 进行大约。我们对此感到非常困惑,需要在正确的方向上推动才能理解我们应该做什么。

// Find contours
java.util.ArrayList<java.util.ArrayList<Point>>();
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Mat hierarchy = new Mat();
Imgproc.findContours(bw.clone(), contours, hierarchy, Imgproc.RETR_EXTERNAL,       Imgproc.CHAIN_APPROX_SIMPLE);

// java.util.ArrayList<Point> approx = new java.util.ArrayList<Point>();
MatOfPoint2f approx = new MatOfPoint2f();

Mat dst = img.clone();

for (int i = 0; i < contours.size(); i++)
{
// Approximate contour with accuracy proportional
// to the contour perimeter
MatOfPoint2f contoursMat2 = new MatOfPoint2f( contours.get(i));

Imgproc.approxPolyDP(contoursMat2, approx, Imgproc.arcLength(contoursMat2, true) * 0.02, true);

// Skip small or non-convex objects 
if (Math.abs(Imgproc.contourArea(contours.get(i))) < 100 || !Imgproc.isContourConvex(approx))
continue;

对于那些将来看到这篇文章的人,这是我的代码的摘录

MatOfPoint2f contour2f = new MatOfPoint2f(finalContour.get(i).toArray());
double approxDistance = Imgproc.arcLength(contour2f,  true)*0.01;
Imgproc.approxPolyDP(contour2f, approxCurve, approxDistance, true);
centers[i] = new Point();
MatOfPoint points = new MatOfPoint(approxCurve.toArray());

//if the contour has an circularness shape to it
if (approxCurve.toArray().length >= 8 && approxCurve.toArray().length <= 18) {
 //insert codes here
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV C++ 转换为 Java 以解决形状检测问题 的相关文章

随机推荐

  • 在 NetBeans 8.0 中调试需要 sudo 运行的 C++ 程序

    我知道这个问题在不同的网站上被问过很多次 但我找不到任何如何解决我的问题的建议 我正在 NetBeans 8 0 中使用 GCC 4 8 1 需要 直观地 调试一个访问原始设备的程序 因此我需要通过 sudo 运行它 我的项目属性设置是 运
  • 如果异步引发,事件会起作用吗?

    我有一个类的以下骨架 正如您在 TODO 注释中所看到的 我将在这里实现 AsyncEnumerator 构造 此方法将获取请求并将数据传递给另一个方法进行处理 根据流程 我想调用事件 SendMilestoneReached 或 Send
  • 哪个目录是 `brew cask install` 使用的真实位置?

    哪个目录是真实位置brew cask install uses 我想找到应用程序的真实位置 而不是符号链接 Application 您可以在可用的应用程序中找到每个应用程序的自定义命令Casks https github com caskr
  • 嵌入允许添加和删除的 Symfony2 表单集合

    在 Symfony2 中 如果我嵌入表单集合 http symfony com doc current cookbook form form collections html指向Doctrine中的多对一关系并允许添加和删除 如果我从头删除
  • 将系统属性从 Gradle 传递到 Spring Boot

    我想将某些安全敏感属性传递到我的 Spring Boot 应用程序中 我在开发过程中通过命令行和 或外部设置的系统属性通过 Gradle 启动该应用程序 我无法将这些写入 build gradle 脚本或属性文件之类的内容 因为它们将被提交
  • 快速写出png

    Summary 我想尽快编写一个 png 文件 而不用担心压缩 也就是说 我不太关心文件大小 但我确实关心写入尽可能快地发生 动机 我正在客户端使用 OpenLayers 并在后端使用 python C 制作一个基于 Web 的地图应用程序
  • 运算符重载?

    我让自己成为了一个 RSS 阅读器 它可以让我了解最新情况并通知我新节目 或者至少这就是背后的想法 我创建了一个结构体 SeasonEpisode 其中包含两个整数 季节 剧集 和一个覆盖 ToString 函数 我将最新观看的内容存储在本
  • 从文本文件中删除行的有效方法

    我需要从文本文件中删除特定行 做到这一点最有效的方法是什么 文件可能很大 超过百万条记录 更新 下面是我当前正在使用的代码 但我不确定它是否好 internal void DeleteMarkedEntries string tempPat
  • 无法在 Django 中创建自定义 __str__ 调用父级的 __str__

    尽管我知道如何制作它 并且已经搜索了比较我的代码的示例 但我不明白为什么我不能调用具有其自身的模型 str 在其父级内部调用 str 我得到一个RuntimeError maximum recursion depth exceeded in
  • 如何将列值转换为列?

    我已经浏览了 Stackoverflow 在线图书和 google 上的大量 SQL Pivot 示例 但我仍然无法弄清楚如何执行 我称之为 简单的 Pivot 操作 实施例1 https stackoverflow com questio
  • 如何轻松检查 .NET 中的文件访问是否被拒绝?

    基本上 我想在实际尝试打开文件之前检查我是否有权打开该文件 除非必须 否则我不想使用 try catch 进行此检查 是否有我可以事先检查的文件访问属性 过去我已经做过无数次这样的事了 但几乎每次我的尝试都是错误的 文件权限 甚至文件存在
  • 重复播放后媒体播放器错误 (-19,0)

    我有一款游戏 当关卡完成时会播放声音 一开始一切正常 但在重复 10 或 20 次级别后 logcat 突然报告 MediaPlayer 错误 19 0 和 或 MediaPlayer 在状态 0 下启动 并且不再发出声音 我最初有 mp3
  • 如何使用 PIL 优化调色板图像大小?

    我的目标是在黑色图像上绘制一些多边形 以使所得图像的总尺寸尽可能小 所以我在维基上读了一篇关于索引颜色的文章 link https en wikipedia org wiki Indexed color 并且这对我来说似乎是一个不错的选择
  • MSSQL/dblib 的 PDO 日期时间格式

    MSSQL 2005 数据库具有排序规则 German Phonebook BIN 但这并不重要 与数据库的连接是通过 PDO 和 FreeTDS 完成的 在 Debian Squeeze 下使用 PHP 当我尝试从表中选择日期时间值时 我
  • 如何注释掉 XML 元素(使用 minidom DOM 实现)

    我想注释掉 xml 文件中的特定 XML 元素 我可以删除该元素 但我更愿意将其注释掉 以备以后需要 我目前使用的删除元素的代码如下所示 from xml dom import minidom doc minidom parse myXml
  • Django 编辑用户配置文件

    我正在尝试在前面创建一个 编辑个人资料 表单 发生的情况是我的表单 我不是 100 确定 尝试创建一个用户 而不是查找当前用户并更新他的个人资料 所以我认为这就是问题所在 在这里检查了很多问题 但没有一个足够清楚 我尝试编辑的字段是电子邮件
  • 此处不允许使用列 Oracle SQL 处理多个列

    我正在尝试将记录插入表中 但当我插入此记录时 我的 项目评级列 下例中的 PG 上出现 此处不允许列 错误 INSERT INTO ITEM VALUES item s1 NEXTVAL 786936161878 SELECT common
  • Rails 反跳延迟作业后台任务?删除重复项

    去抖是推迟函数 作业执行直到经过一定时间之后的常用方法 用例 来自多个用户的活跃聊天对话 他们不应该收到每条键入消息的电子邮件通知 但很可能在几分钟的静默后 如果消息未读 用户应该会看到一条通知 延迟作业 没有解决方案 有相关问题 http
  • 互斥查询

    Question 您如何将产生互斥结果的 IF ELSE 分配到产生相同结果的查询中 Use Case 作为主体 当前登录的用户 我可以获得组织中的用户列表 如果我被分配到任何部门 那么用户列表是分配到相同部门的较小的集合 Example
  • OpenCV C++ 转换为 Java 以解决形状检测问题

    我们对 openCV Java 开发有点陌生 遇到了一个问题 我们正在努力转型这段代码 https github com bsdnoobz opencv code blob master shape detect cpp到 Android