gpt4 book ai didi

c# - 我应该如何使用 velX,velY 信息来获取当前帧和前一帧之间的 X 和 Y 位移?

转载 作者:行者123 更新时间:2023-12-02 17:54:30 26 4
gpt4 key购买 nike

我在 C# 中使用 openCV 库中的 Lucas Kanade 光流算法;有一系列帧,我想在每两个帧中找出什么是光流并将其显示在图片框中。

我可以从以下函数中获取 velX 和 velY:

Emgu.CV.OpticalFlow.LK(imGrayCurrent, imGrayNext, windSize, velX, velY);

现在,我应该如何使用这两个来显示两个帧之间的流?或者换句话说,我应该如何获得像素的位移?

肿瘤坏死因子

最佳答案

一种常见的方法是使用 HSV 到 RGB 的转换,请参阅 Middlebury Flow Dataset 。所以:

  • 将运动矢量转换为极坐标:

    长度 = sqrt(velx² + vely²)

    angle = acos(vely/length) [注意额外的检查,例如必须做无穷大]
  • 将角度归一化为 [0,360](对于 OpenCV,或 [0,1],具体取决于您稍后使用的函数)并将长度归一化为 [0,1]。创建一个 hsv 空间(具有第一个 channel H(色调)、第二个 channel S(饱和度)和第三个 channel V(值)的 3 channel 图像)并设置:H = 角度、S = 长度和 V = 1。
  • 将 HSV 颜色空间转换为 RGB,例如通过使用 cv::cvtColor(hsv, rgb, HSV2BGR);

  • 生成的图像现在显示运动矢量场 (velx,vely),其中颜色决定运动的方向,饱和度决定运动的长度或速度。

    关于c# - 我应该如何使用 velX,velY 信息来获取当前帧和前一帧之间的 X 和 Y 位移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10014776/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com