文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

OpenCV基于稠密光流如何实现视频跟踪

2023-07-05 04:20

关注

这篇“OpenCV基于稠密光流如何实现视频跟踪”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“OpenCV基于稠密光流如何实现视频跟踪”文章吧。

1、概述

案例:基于稠密光流的视频跟踪

API介绍:   

calcOpticalFlowFarneback( InputArray prev, InputArray next, InputOutputArray flow,                                            double pyr_scale, int levels, int winsize,                                            int iterations, int poly_n, double poly_sigma,                                            int flags );

实现步骤:

实例化VideoCapture

使用其open方法打开视频文件

获取视频第一帧并得到其灰度图(因为稠密光流输入只支持单通道8位)

while(true)循环读取视频帧

将当前帧灰度化

执行稠密光流函数,并输出光流数据

将光流数据绘制出来

显示光流数据

2、代码示例

(ps:界面中的按钮元素使用到了Qt)

HF_Object_Tracking::HF_Object_Tracking(QWidget *parent)    : MyGraphicsView{parent}{    this->setWindowTitle("稠密光流对象跟踪");    QPushButton *btn = new QPushButton(this);    btn->setText("选择视频");    connect(btn,&QPushButton::clicked,[=](){        choiceVideo();    });}  void HF_Object_Tracking::choiceVideo(){    path = QFileDialog::getOpenFileName(this,"请选择视频","/Users/yangwei/Downloads/",tr("Image Files(*.mp4 *.avi)"));    qDebug()<<"视频路径:"<<path;    hfObjectTracking(path.toStdString().c_str());} void HF_Object_Tracking::hfObjectTracking(const char* filePath){    VideoCapture capture;    capture.open(filePath);    if(!capture.isOpened()){        qDebug()<<"视频路径为空";        return;    }    Mat frame,gray;    Mat prev_frame ,prev_gray;    Mat flowResult,flowData;    capture.read(frame);//读取第一帧数据    //转灰度图    cvtColor(frame,prev_gray,COLOR_BGR2GRAY);//将frame转灰度图赋值给前一帧     while(capture.read(frame)){        cvtColor(frame,gray,COLOR_BGR2GRAY);        if(!prev_gray.empty()){            //稠密光流跟踪            calcOpticalFlowFarneback(prev_gray,gray,flowData, 0.5, 3, 15, 3, 5, 1.2, 0);            cvtColor(prev_gray, flowResult, COLOR_GRAY2BGR);            for (int row = 0; row < flowResult.rows; row++) {                for (int col = 0; col < flowResult.cols; col++) {                    const Point2f fxy = flowData.at<Point2f>(row, col);                    if (fxy.x > 1 || fxy.y > 1) {                        line(flowResult, Point(col, row), Point(cvRound(col + fxy.x), cvRound(row + fxy.y)), Scalar(0, 255, 0), 2, 8, 0);                        circle(flowResult, Point(col, row), 2, Scalar(0, 0, 255), -1);                    }                }            }            imshow("flow", flowResult);            imshow("input", frame);        }//        imshow("frame",frame);        int key = waitKey(1);        if(key==27){            break;        }    } }

以上就是关于“OpenCV基于稠密光流如何实现视频跟踪”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯