在光流路径场周围创建边界框

2024-03-24

我用过cv::calcOpticalFlowFarneback使用 openFrameworks 中的 ofxOpenCv 计算视频当前帧和前一帧中的光流。

然后,我绘制顶部具有光流场的视频,然后绘制显示高于特定阈值的区域中的运动流的矢量。

我现在想做的是创建这些运动区域的边界框并获取质心并存储它x,y用于跟踪的变量中的位置。

如果有帮助的话,这就是我绘制流场的方式。

if (calculatedFlow){
    ofSetColor( 255, 255, 255 );
    video.draw( 0, 0);
    int w = gray1.width;
    int h = gray1.height;
    //1. Input images + optical flow
    ofPushMatrix();
    ofScale( 4, 4 );
    //Optical flow
    float *flowXPixels = flowX.getPixelsAsFloats();
    float *flowYPixels = flowY.getPixelsAsFloats();
    ofSetColor( 0, 0, 255 );
    for (int y=0; y<h; y+=5) {
        for (int x=0; x<w; x+=5) {
            float fx = flowXPixels[ x + w * y ];
            float fy = flowYPixels[ x + w * y ];
            //Draw only long vectors
            if ( fabs( fx ) + fabs( fy ) > .5 ) {
                ofDrawRectangle( x-0.5, y-0.5, 1, 1 );
                ofDrawLine( x, y, x + fx, y + fy );
                }
              }
            }
          } 

我通过从 flowX 和 flowY 创建新图像解决了我的问题。这是通过将 flowX 和 flowY 添加到新的 CV FloatImage 来完成的。

flowX +=flowY;
flowXY = flowX;

然后我能够从新创建的图像的像素中查找轮廓,然后我可以存储所有运动斑点的所有质心。

Like so:

contourFinder.findContours( mask, 10, 10000, 20, false );
//Storing the objects centers with contour finder.
vector<ofxCvBlob>  &blobs = contourFinder.blobs;
int n = blobs.size();     //Get number of blobs
obj.resize( n );          //Resize obj array
for (int i=0; i<n; i++) {
    obj[i] = blobs[i].centroid;  //Fill obj array
}

我最初注意到,由于负值,仅在 x 轴和 y 轴的一个方向上跟踪运动。我通过调用 cv::Mat 中的 abs() 函数来更改光流的计算来解决此问题。

Mat img1( gray1.getCvImage() );  //Create OpenCV images
Mat img2( gray2.getCvImage() );
Mat flow;
calcOpticalFlowFarneback( img1, img2, flow, 0.7, 3, 11, 5, 5, 1.1, 0 );
//Split flow into separate images
vector<Mat> flowPlanes;
Mat newFlow;
newFlow = abs(flow); //abs flow so values are absolute. Allows tracking in both directions.
split( newFlow, flowPlanes );
//Copy float planes to ofxCv images flowX and flowY
IplImage iplX( flowPlanes[0] );
flowX = &iplX;
IplImage iplY( flowPlanes[1] );
flowY = &iplY;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在光流路径场周围创建边界框 的相关文章

随机推荐

  • Firestore:id 在集合中还是全局中是唯一的?

    对于我的数据库的结构 我需要知道 Firebase Cloud Firestore 中自动生成的标识符在集合或整个数据库中是否唯一 怎么做 调用生成的密钥add https firebase google com docs firestor
  • 根据屏幕分辨率调整 WPF 窗口和内容的大小

    我有一个 WPF 应用程序 每个窗口上都有多个控件 有些是重叠的等 我需要的是一种让应用程序根据屏幕分辨率自动调整自身大小的方法 有任何想法吗 语法 Height Binding SystemParameters PrimaryScreen
  • 即使在 docmd.close 之后,表单也将我的桌子紧紧锁定

    抱歉 大家的文字墙很长 但这需要解释 要发布的代码太多了 我正在将固定宽度文件导入到需要数据输入的方法中 我使用transferText 将文件导入到两个规范中 一个是全局的 另一个是特殊情况 我有一个函数 它使用 DAO 循环遍历 Tab
  • 如何排除 vue 文件夹在 vite 中构建?

    是否可以从 vite 构建中排除完整 延迟加载 文件夹 如果是这样怎么办 import defineConfig from vite import resolve as resolver from path import vue from
  • 命令行 XRandR 和自己的代码之间的差异

    我需要以编程方式获取显示器的刷新率 当我打字时xrandr 1 4 1 opensuse 13 在命令行上我得到 Screen 0 minimum 8 x 8 current 1920 x 1200 maximum 16384 x 1638
  • 如何从 JavaScript 对象中删除 setter?

    考虑以下代码 var x 0 var o function getter return x Object defineProperty o y get getter set function y x y Object definePrope
  • 将文本文件传递到标准输入

    以下代码是较大翻译程序的一部分 下面的代码要求用户输入一行 而不仅仅是将其写回 有没有一种方法可以让我不用每次都写一行 而是在标准输入中传递整个文件等 translate txt 程序可以将其逐行写回 并在行尾时产生错误到达了 includ
  • Angular 5将单击事件的数据从父组件传递到在父组件上单击按钮的子组件

    我在表中有一些数据绑定 单击任何特定的我想将当前单击的对象显示更多相关数据到另一个组件 子组件 例如我从此链接获取的数据 http jsonplaceholder typicode com users http jsonplaceholde
  • R - 识别哪些列包含货币数据 $

    我有一个非常大的数据集 其中一些列格式为货币 一些数字 一些字符 读取数据时 所有货币列都被识别为因子 我需要将它们转换为数字 数据集太宽 无法手动识别列 我试图找到一种编程方法来识别列是否包含货币数据 例如以 开头 然后传递要清理的列列表
  • 检测客户端已与 TCP/IP 断开连接的正确方法

    我使用了异步 TCP IP 服务器 一切正常 但是当客户端由于错误或应用程序强制退出而断开连接时 它也会由于 IO IOException 类型的异常而关闭我的服务器 异常发生在以下子程序中 Private Sub ReadCallback
  • Java Spring JPA 分页如果超过一页则不起作用

    我正在尝试将 jpa 分页与自定义查询一起使用 如果匹配 2 个案例 则分页有效 Case 1 如果可用数据少于 10 个且页码为 0 的请求 如果不是 则请求不起作用 and Case 2 如果可用数据超过 10 个且页码为 1 的请求
  • 从 USB 密钥使用 Subversion

    这些天我要把一些工作带回家 并通过 USB 密钥传输 因为我的工作位于私人 Intranet 上 我正在使用 Visual Studio 2008 我发现构建的性能因关闭密钥而降低 我最初的提高性能的想法是使用 Robocopy 在本地镜像
  • 为什么代理模式是结构模式,为什么状态模式是行为模式?

    为什么代理模式是一种结构模式 为什么状态模式是一种行为模式 确定新模式应被视为结构性模式还是行为性模式的标准是什么 如果重点是如何组织对象之间的关系以形成更大的组件 则模式是结构性的 而行为模式则重点关注对象职责的分配以及它们之间的通信 代
  • 如何通过代码检查android videoview是否支持文件?

    我正在尝试通过 Android videoview 播放视频 这是我的代码 super onCreate savedInstanceState setContentView R layout video VideoView videoVie
  • 为什么这个算法的Big-O是N^2*log N

    将数组 a 从 a 0 填充到 a n 1 生成随机数 直到得到之前索引中不存在的数字 这是我的实现 public static int first int n int a new int n int count 0 while count
  • 使用“WlanScan”刷新 WiFi 网络列表(将 api 语法从 c# 转换为 vba...或解决方法?)

    我需要刷新 Windows 的无线网络列表 我很乐意接受任何可以直接自动化的解决方法 cmdline wmi 等 或间接来自VBA 我使用的是 Windows 7 Home 64 位和 Office 365 Pro 64 位 I can l
  • 检查 LINQ 查询的结果是否包含值

    我有一个 LINQ 查询 它从名为 Permissions 的表中返回所有记录 其中 userId 是当前用户 我想要做的是对此结果集进行检查 看看是否存在值为 5 的 PermissionId 最简单的方法是什么 bool contain
  • 如何测量 .NET 中单个对象占用的内存量

    我想知道 C NET 和 或 Visual Studio 中是否有一个简单的命令或指令可以告诉我单个对象占用了多少内存 我偷偷怀疑 sizeof 运算符会对我撒谎 我的这种信念合理吗 有一个有点相关的问题here https stackov
  • 获取绘制在图形上的所有对象(艺术家)

    我希望设置一种方法 可以将正常图形 黑线 白色 透明背景 转换为伪反转图形 浅线 黑色 透明背景 我可以对图像进行后处理反转 但直接反转的颜色看起来很糟糕 所以我想 尝试 创建从一组颜色到另一组颜色的映射 然后将其应用于已添加的所有艺术家到
  • 在光流路径场周围创建边界框

    我用过cv calcOpticalFlowFarneback使用 openFrameworks 中的 ofxOpenCv 计算视频当前帧和前一帧中的光流 然后 我绘制顶部具有光流场的视频 然后绘制显示高于特定阈值的区域中的运动流的矢量 我现