全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 模拟技术 >

如何在OpenCV中实现光流呢?

时间:2023-01-18 15:19

人气:

作者:admin

标签: 光流    opencv  何在  实现   

导读:光流是由物体或照相机的运动引起的两个连续帧之间图像物体视在运动的模式。它是2D向量场,其中每个向量都是位移向量,显示点从第一帧到第二帧的运动。...

介绍

光流是由物体或照相机的运动引起的两个连续帧之间图像物体视在运动的模式。它是2D向量场,其中每个向量都是位移向量,显示点从第一帧到第二帧的运动。

光流在以下领域有许多应用:

  • 运动结构
  • 视频压缩
  • 视频稳定

光流的工作基于以下几个假设:

  • 物体的像素强度在连续的帧之间不改变。
  • 相邻像素具有相似的运动。

实现

在OpenCV中实现光流的步骤

1 查找一些关键点

在例子中我们用goodFeaturesToTrack函数来查找关键点。函数原型:

void cv::goodFeaturesToTrack( InputArray _image, OutputArray _corners,
                              int maxCorners, double qualityLevel, double minDistance,
                              InputArray _mask, int blockSize,
                              bool useHarrisDetector, double harrisK )

2 迭代跟踪这些点

例子中用calcOpticalFlowPyrLK来计算光流。函数原型:

void cv::calcOpticalFlowPyrLK( InputArray _prevImg, InputArray _nextImg,
                               InputArray _prevPts, InputOutputArray _nextPts,
                               OutputArray _status, OutputArray _err,
                               Size winSize, int maxLevel,
                               TermCriteria criteria,
                               int flags, double minEigThreshold )

根据我的理解,在当前帧查找一些关键点,然后根据这些关键点,在下一帧进行匹配,得到这些点在下一帧的位置。这样就得到了了一组向量,表示了当前帧和下一帧之前点的移动,也就实现了对一些物体的跟踪。

官方例子

#include 
#include 
#include 
#include 
#include 
#include 


using namespace cv;
using namespace std;


int main(int argc, char **argv)
{
    const string about =
        "This sample demonstrates Lucas-Kanade Optical Flow calculation.\\n"
        "The example file can be downloaded from:\\n"
        "  https://www.bogotobogo.com/python/OpenCV_Python/images/mean_shift_tracking/slow_traffic_small.mp4";
    const string keys =
        "{ h help |      | print this help message }"
        "{ @image | vtest.avi | path to image file }";
    CommandLineParser parser(argc, argv, keys);
    parser.about(about);
    if (parser.has("help"))
    {
        parser.printMessage();
        return 0;
    }
    string filename = samples::findFile(parser.get

运行结果截图

2.jpg

审核编辑:刘清

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信