0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在OpenCV中实现光流呢?

冬至子 来源:技术铺子 作者:chasenzhang 2023-01-18 15:19 次阅读

介绍

光流是由物体或照相机的运动引起的两个连续帧之间图像物体视在运动的模式。它是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

审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • OpenCV
    +关注

    关注

    29

    文章

    624

    浏览量

    41212
  • python
    +关注

    关注

    55

    文章

    4766

    浏览量

    84369
  • printf函数
    +关注

    关注

    0

    文章

    31

    浏览量

    5878
收藏 人收藏

    评论

    相关推荐

    何在OpenCV中使用基于深度学习的边缘检测?

    在这篇文章,我们将学习如何在OpenCV中使用基于深度学习的边缘检测,它比目前流行的canny边缘检测器更精确。
    的头像 发表于 05-19 09:52 2025次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>OpenCV</b>中使用基于深度学习的边缘检测?

    ELF 1技术贴|如何在Ubuntu编译OpenCV

    在之前发布的文章探讨了交叉编译OpenCV并部署至嵌入式系统的方法。然而,在调试阶段,我们发现在Ubuntu环境下将OpenCV编译为X86架构可能更加方便和高效。通过在主机上编译并使用X86架构
    的头像 发表于 05-31 16:41 1115次阅读
    ELF 1技术贴|如<b class='flag-5'>何在</b>Ubuntu<b class='flag-5'>中</b>编译<b class='flag-5'>OpenCV</b>库

    【教程】通俗讲法告诉你什么是Optical Flow,附算法

    学者重视。 还是回归应用吧,目前OpenCV实现了不少的算法。1. calcOpticalFlowPyrLK通过金字塔Lucas-Ka
    发表于 06-02 17:18

    何在STM32上去搭建一种硬件

    为什么需要控?控的作用是什么?如何在STM32上去搭建一种硬件
    发表于 12-07 06:38

    何在RK3288上去安装Opencv开源计算机视觉库

    Opencv是什么?如何在RK3288上去安装Opencv开源计算机视觉库
    发表于 02-16 07:06

    何在STM32上搭建硬件

    为什么需要控?一般常用的控方式有几种?如何在STM32上搭建硬件
    发表于 02-18 06:19

    何在RK3288上安装Opencv

    何在RK3288上安装Opencv
    发表于 03-10 06:49

    OpenCV的BGR格式,在libyuv对应的那个格式?OpenCV的RGB格式

    OpenCV的BGR格式,在libyuv对应的那个格式?OpenCV的RGB格式
    发表于 09-19 06:00

    何在开发环境的Python环境下使用我们提供的BM-OpenCV?

    何在开发环境的Python环境下使用我们提供的BM-OpenCV?
    发表于 09-19 07:14

    在Vivado如何实现OpenCV设计

    观看视频,了解OpenCV库和其在一些典型应用的使用,以及Zynq-7000 SoC的优点和如何实现OpenCV设计。同时您还能学习到如何在
    的头像 发表于 11-20 06:46 3893次阅读

    OpenCV库的特点和主要功能及实现方法的运动说明

    序列图像的计算是计算机视觉研究领域运动估计的重要组成部分。本文介绍了OpenCV库的特点和主要功能,通过调用函数库的金字塔Lucas—Kanade
    发表于 10-15 11:56 12次下载
    <b class='flag-5'>OpenCV</b>库的特点和主要功能及<b class='flag-5'>实现</b><b class='flag-5'>光</b><b class='flag-5'>流</b>方法的运动说明

    OpenCV库的特点和功能与如何快速实现场的方法说明

    序列图像的计算是计算机视觉研究领域运动估计的重要组成部分。本文介绍了0PenCV库的特点和主要功能,通过调用函数库的金字塔Lucas-Kanade
    发表于 10-31 11:53 3次下载
    <b class='flag-5'>OpenCV</b>库的特点和功能与如何快速<b class='flag-5'>实现</b><b class='flag-5'>光</b><b class='flag-5'>流</b>场的方法说明

    奥比OpenCV成为战略合作伙伴

    近日,奥比OpenCV(OpenSource Computer Vision Library)签署《战略合作协议》,双方正式成为战略合作伙伴。OpenCV5.0规划纳入3D视觉技
    的头像 发表于 09-25 16:22 2551次阅读

    OpenCV Webinar 2丨如何在OpenCV调用Tengine推理,实现开发效率翻倍

    这个月,OPEN AI LAB的合作伙伴OpenCV 20岁了!值此之际,OpenCV中国团队推出系列OpenCV Webinar,在全球范围内定期邀请OpenCV专家来作...
    发表于 01-26 19:48 3次下载
    <b class='flag-5'>OpenCV</b> Webinar 2丨如<b class='flag-5'>何在</b><b class='flag-5'>OpenCV</b><b class='flag-5'>中</b>调用Tengine推理,<b class='flag-5'>实现</b>开发效率翻倍

    何在OpenCV实现CUDA加速

    OpenCV4.x关于CUDA加速的内容主要有两个部分,第一部分是之前OpenCV支持的图像处理与对象检测传统算法的CUDA加速;第二部分是OpenCV4.2版本之后开始支持的针对深
    的头像 发表于 09-05 10:03 4990次阅读