Android:将 calcOpticalFlowPyrLK 与 MatOfPoint2f 结合使用

2024-03-19

我无法将 calcOpticalFlowPyrLK 与 MatOfPoint2f 一起使用。我声明我的类型如下:

private Mat mPreviousGray;                  // previous gray-level image
private List<MatOfPoint2f> points;          // tracked features
private MatOfPoint initial;                 // initial position of tracked points

并使用以下内容来查找和跟踪功能 (我的代码基于 Robert Laganiere 编写的 C++ 示例光流应用程序。)

// Called whenever a new frame m is captured
private void OpticalFlow(Mat m, int maxDetectionCount, double qualityLevel,
    double minDistance) {

    if (points.get(0).total() < maxDetectionCount/2)                // Check if new points need to be added
    {
        // maxDetectionCount = 500
        // qualityLevel = 0.01
        // minDistance = 10
        Imgproc.goodFeaturesToTrack(m, initial, maxDetectionCount, qualityLevel, minDistance);

        // add the detected features to the currently tracked features
        points.get(0).push_back(initial);
        // Have checked length of points.get(0), is not zero.
    }

    // for first image of the sequence
    if(mPreviousGray.empty())
        m.copyTo(mPreviousGray);

    if( points.get(0).total() > 0 )   // EMG - 09/22/11 - fix optical flow crashing bug 
    {       
        // 2. track features
        Video.calcOpticalFlowPyrLK(mPreviousGray, m, // 2 consecutive images
                points.get(0), // input point position in first image
                points.get(1), // output point postion in the second image
                status,    // tracking success
                error);      // tracking error
    }

    ...

    m.copyTo(mPreviousGray);

    ...
}

之前,变量points是类型List<List<Point>>我将通过实例化 MatOfPoint2f 来在类型之间进行转换fromList并将其传递给 calcOpticalFlowPyrLK。

但是,我不想再这样做,因为这种从列表到列表的转换丢失了点之间的对应关系initial and points。我想保留这种对应关系,因此我可以通过同时迭代两个矩阵中的项目来绘制光流线。

不幸的是,现在我遇到以下断言失败:

09-24 10:04:30.400: E/cv::error()(8216): OpenCV Error: Assertion failed ((npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0) in void cv::calcOpticalFlowPyrLK(const cv::_InputArray&, const cv::_InputArray&, const cv::_InputArray&, const cv::_OutputArray&, const cv::_OutputArray&, const cv::_OutputArray&, cv::Size, int, cv::TermCriteria, int, double), file X:\Dev\git\opencv-2.4\modules\video\src\lkpyramid.cpp, line 593
09-24 10:04:30.400: E/AndroidRuntime(8216): FATAL EXCEPTION: Thread-321
09-24 10:04:30.400: E/AndroidRuntime(8216): CvException [org.opencv.core.CvException: X:\Dev\git\opencv-2.4\modules\video\src\lkpyramid.cpp:593: error: (-215) (npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0 in function void cv::calcOpticalFlowPyrLK(const cv::_InputArray&, const cv::_InputArray&, const cv::_InputArray&, const cv::_OutputArray&, const cv::_OutputArray&, const cv::_OutputArray&, cv::Size, int, cv::TermCriteria, int, double)
09-24 10:04:30.400: E/AndroidRuntime(8216): ]
09-24 10:04:30.400: E/AndroidRuntime(8216):     at org.opencv.video.Video.calcOpticalFlowPyrLK_2(Native Method)
09-24 10:04:30.400: E/AndroidRuntime(8216):     at org.opencv.video.Video.calcOpticalFlowPyrLK(Video.java:445)

奇怪的是,如果我在调用 calcOpticalFlowPyrLK 之前自己添加此断言,它不会失败。

我希望有人可以帮助我找出真正的问题所在,以及如何保留帧之间跟踪点之间的这种关系。

Edit:我已经发现需要采取哪些措施来避免此断言错误,然后应用程序就会正常运行,但是:

  • 我不知道why.
  • 我现在对于 Calib3d.solvePnP 有类似的问题,但是将 ConvertTo 应用于 imagePoints 和 objectPoints 并不能解决这里的问题,也不能解决CvType.CV_32FC2, nor CvType.CV_32F or CvType.CV_64F

纠正断言失败的情况calcOpticalFlowPyrLK,我变了points.get(0).push_back(initial);至以下内容:

Imgproc.goodFeaturesToTrack(m, initial, maxDetectionCount, qualityLevel, minDistance);

MatOfPoint2f initial2f = new MatOfPoint2f();
initial.convertTo(initial2f, CvType.CV_32FC2);
// add the detected features to the currently tracked features
trackedpoints.get(0).push_back(initial2f);

所以我的问题变成了:有人可以为我解释一下一般情况,以便我知道如何使用 Calib3d.solvePnP 解决我的问题吗?


calcOpticalFlowPyrLK 点参数的类型为 MatOfPoint2f,其内部为 CV_32FC2。

solvePnP 第一个参数是点矩阵其内部是CV_32FC3。尝试转换为该格式以查看是否可以修复。

一些 opencv 函数需要特定的 Mat 类型,我想出于效率原因,您必须手动选择正确的类型,而不是 opencv 自动猜测/转换。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:将 calcOpticalFlowPyrLK 与 MatOfPoint2f 结合使用 的相关文章

  • 将非 Android 项目添加到 Android 项目

    我在 Eclipse 中有三个项目 Base Server 和 AndroidClient Base和Server是Java 1 7项目 而AndroidClient显然是一个android项目 基础项目具有在服务器和 Android 客户
  • Android NDK 支持区域设置吗?

    我真正想做的就是使用格式化日期strftime x 以正确的顺序 在大多数平台上调用setlocale 足够 在 Android 上 我不断收到 美国日期 那么 Android 不支持语言环境吗 No setlocale and strft
  • 如何使用 Retrofit 解析嵌套 json....?

    我不知道该怎么办使用 Retrofit 解析 json 熟悉使用 Retrofit 解析简单的 json 但不熟悉解析嵌套Json using Retrofit 这是我的 Json 数据 current observation image
  • 如何在 Spring 中使 @PropertyResource 优先于任何其他 application.properties ?

    我正在尝试在类路径之外添加外部配置属性资源 它应该覆盖任何现有的属性 但以下方法不起作用 SpringBootApplication PropertySource d app properties public class MyClass
  • Android 无法解析日期异常

    当尝试解析发送到我的 Android 客户端的日期字符串时 我得到一个无法解析的日期 这是例外 java text ParseException 无法解析的日期 2018 09 18T00 00 00Z 位于 偏移量 19 在 java t
  • 如何仅从 Firestore 获取最新更新的数据?

    在 Firestore 上发现任何更改时始终获取整个文档 如何只获取最近更新的数据 这是我的数据 我需要在第一次加载时在聊天中按对象顺序 例如 2018 09 17 30 40 msg和sendby 并且如果数据更新则仅获取新的msg和se
  • 提高 PostgreSQL 1 亿数据左连接查询性能

    我在用Postgresql 9 2 version Windows 7 64 bit RAM 6GB 这是一个Java企业项目 我必须在我的页面中显示订单相关信息 有三个表通过左连接连接在一起 Tables TV HD 389772 行 T
  • Java继承,扩展类如何影响实际类

    我正在查看 Sun 认证学习指南 其中有一段描述了最终修饰符 它说 如果程序员可以自由地扩展我们所知的 String 类文明 它可能会崩溃 他什么意思 如果可以扩展 String 类 我是否不会有一个名为 MyString 的类继承所有 S
  • 蓝牙发送和接收文本数据

    我是 Android 开发新手 我想制作一个使用蓝牙发送和接收文本的应用程序 我得到了有关发送文本的所有内容逻辑工作 但是当我尝试在手机中测试它时 我看不到界面 这是Main Activity Code import android sup
  • JDBC 时间戳和日期 GMT 问题

    我有一个 JDBC 日期列 如果我使用 getDate 则会得到 date 仅部分2009 年 10 月 2 日但如果我使用 getTimestamp 我会得到完整的 date 2009 年 10 月 2 日 13 56 78 890 这正
  • 为什么 Google 建议将库复制到您的树中?

    谷歌的Play 服务 API 的使用说明 http developer android com google play services setup html 例如 说 将 extras google google play service
  • 轻松的反应

    我有一个与这里描述的类似的案例 动态更改RESTEasy服务返回类型 https stackoverflow com questions 3786781 dynamically change resteasy service return
  • Android Studio代理设置构建错误

    每当我尝试在 Android Studio 中构建应用程序时 都会收到以下错误 Error 169 254 16 169 254 16 Will ignore proxy settings for these hosts 我收到错误 5 次
  • 部署 .war 时出现 Glassfish 服务器错误:部署期间发生错误:准备应用程序时出现异常:资源无效

    我正在使用以下内容 NetBeans IDE 7 3 内部版本 201306052037 爪哇 1 7 0 17 Java HotSpot TM 64 位服务器虚拟机 23 7 b01 NetBeans 集成 GlassFish Serve
  • 在 Spring 上下文中查找方法级自定义注释

    我想知道的是 所有的类 方法Spring http en wikipedia org wiki Spring Framework注释为 Versioned的bean 我创建了自定义注释 Target ElementType METHOD E
  • JetPack Compose - 卡中行中的weight() 不起作用

    创建 Android 应用程序时 我将一些可组合项放在卡片的一行中 如下所示 但它没有按我的预期工作 我添加 weight 1f 的可组合项不再显示 data class Test val title String val text Str
  • ARM Chromebook 上的 Android 开发环境?

    我尝试了多次安装和使用安卓工作室 https developer android com studio index html on an ARM Chromebook C100P https archlinuxarm org platfor
  • Java RMI - 客户端超时

    我正在使用 Java RMI 构建分布式系统 它必须支持服务器丢失 如果我的客户端使用 RMI 连接到服务器 如果该服务器出现故障 例如电缆问题 我的客户端应该会收到异常 以便它可以连接到其他服务器 但是当服务器出现故障时 我的客户端什么也
  • Android Espresso 单击按钮时出现错误

    我正在尝试使用 espresso 框架为 Android 应用程序编写一些 UI 测试 现在我只是检查启动屏幕上是否存在所有元素 然后尝试单击登录按钮 单击按钮时 测试由于错误而失败 我似乎无法理解为什么会发生这种情况 我的测试代码是 Ru
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • 我正在尝试使用 Firebase 在 Flutter 中使用 google 注销,但它不起作用

    我将 Flutter 与 Firebase 结合使用 当我尝试使用电子邮件和密码注销时 效果很好 但当我尝试使用谷歌时 它不起作用 这是我的代码 try switch user providerData 0 providerId case
  • IIS7 集成与经典管道 - 哪个使用更多 ASP.NET 线程?

    通过集成管道 所有请求都通过 ASP NET 传递 包括图像 CSS 而在经典管道中 默认情况下仅通过 ASP NET 传递对 ASPX 页面的请求 集成管道会对线程使用产生负面影响吗 假设我从 IIS 服务器请求 500 MB 二进制文件
  • Eclipse Oxygen 的 Lombok 问题

    我最近升级到了新的 Eclipse 版本 Oxygen 我从网站下载了 lombok jar 并安装了它 这就是如何eclipse ini安装后的样子 startup plugins org eclipse equinox launcher
  • Android Volley Https SSL 自签名和 Google Maps API

    我们正在使用 Android Volley 并使用可以正常工作的自认证 SSL 但现在我们想要实现 Google 地图 但它不起作用 它只是不会抛出任何错误 它只是显示一个灰色的屏幕 This is our implementation o
  • Shell脚本:在不排序的情况下查找整数序列中的最大值

    我有一个包含一长串整数的文件 10 4 66 我想使用 UNIX 命令行工具找到最大值 我知道我可以使用sort 事实上 这个问题有解决方案 使用sort 但是效率很低 需要 O N log N 和大量内存 通过一个简单的 for 循环 我
  • 为什么我的故事板中的视图控制器不断消失?

    我的故事板文件中的视图控制器不断消失 截至目前 我必须按向上箭头并突出显示每个项目才能恢复我的视图控制器 我可以做些什么来摆脱这个问题 还有什么我可以做的来将这些消失的视图控制器恢复到我的故事板上 这是一个错误 通常我可以通过关闭故事板并重
  • jquery只获取所有带有id的html元素

    我有一个 div 其中有很多 html 元素 如其他 div trs tds 表格等 是否可以获取所有具有 id 的元素 我知道问 test 会给我这个 id 的特定元素 但有可能得到find 或者类似的东西 id 返回所有设置了 id 的
  • WOW.js + 查询加载器 2

    我有一个问题WOW js https github com matthieua WOW and 查询加载器2 http gayadesign com diy queryloader2 preload your images with eas
  • vcruntime140.dll 与 vcruntime140d.dll

    这两个dll有什么区别vcruntime140 dll and vcruntime140d dll 为什么我们需要它们 它们都是 Microsoft Visual C 2015 Redistributable 的一部分吗 谷歌搜索了很长一段
  • 无论我做什么,NSLayoutManager 都会隐藏新行字符

    我正在尝试显示不可见的字符 例如 NSTextView 子类中的换行符 像重写 NSLayoutManager 的 drawGlyph 方法这样的常用方法是一个坏主意 因为它太慢并且无法在多页布局中正常工作 我想做的是重写 NSLayout
  • 如何监控客户端与 WCF 服务的连接?

    我创建了一个 WCF 服务 其中 ServiceHost 类无法实例化为单例 我需要监视与该服务的每个连接 甚至在第一次调用与其关联的方法之前也是如此 在实践中 我想记录客户端何时打开与服务通信的通道 是否可以 在网上我找到的解决方案只有两
  • 从字符串中删除第一个字符

    有没有办法删除或替换为 the X 从词的开头 Ex XN5634 erX123 erNX45 期望的输出 N5634 er123 erNX45 我总共有大约14000字 我用了 gsub X mylist fixed T but X被移除
  • 加载 CharSequence 时出错(scala 2.11.4)

    他们建议我更新 scala 所以我这样做了 scala version Scala code runner version 2 11 4 Copyright 2002 2013 LAMP EPFL 但这个错误仍然存 在 my project
  • 如何更改选项菜单的背景颜色?

    我正在尝试更改选项菜单的默认颜色为白色 我希望选项菜单上的每个项目都有黑色背景 我已经在菜单元素内的项目元素上尝试了一些像 android itemBackground 000000 的拍摄 但它不起作用 我怎样才能做到这一点 在花费了大量
  • window.location.href 与 React-router-dom 的重定向实用程序

    我有使用 React 和 React Router 编写的 webapp 使用 window location href 进行重定向与使用通过 React router 提供的组件有什么优点 缺点 Use history push page
  • 如何使用Python向Firebase中的用户发送电子邮件验证码?

    我正在做一个KivyMD应用程序和我想在用户注册应用程序时发送电子邮件验证码 我正在使用一个firestore数据库与python对于这个项目 但我没有这样做的想法 注册流程是 用户使用他的电子邮件地址注册该应用程序 电子邮件包含一个代码
  • 编辑/保存 CSV 文件中的行

    遵循此操作后topic https stackoverflow com questions 13100139 update one column in csv file c sharp我能够创造 新行 但我的问题是怎么做 我将新行保存或写入
  • 处理 PHP 脚本中的 If-modified-since 标头

    我有一个 PHP 脚本 用 img 范围 该参数的值是图像的 urlencoded URL 我的脚本检查该图像是否已存储在我的服务器上 如果没有 它会下载它 之后 它可以选择调整图像大小并将其发送到 STDOUT 即返回到请求浏览器 前面加
  • 在 Flask 中的测试之间回滚许多事务

    我的测试需要很长时间才能运行 我试图在测试之间回滚事务 而不是在测试之间删除和创建表 问题是在某些测试中我进行了多次提交 编辑 如何回滚测试之间的事务以便测试运行得更快 这是用于测试的基类 import unittest from app
  • Android:将 calcOpticalFlowPyrLK 与 MatOfPoint2f 结合使用

    我无法将 calcOpticalFlowPyrLK 与 MatOfPoint2f 一起使用 我声明我的类型如下 private Mat mPreviousGray previous gray level image private List