OpenCV 光流法总结

2024-05-13 07:04
文章标签 总结 opencv 光流法

本文主要是介绍OpenCV 光流法总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0.概述

1.原理说明

2.代码实现

#include <iostream>
#include <opencv2/opencv.hpp>int main(int argc, char** argv) {if(argc != 2) {std::cerr << "Usage: " << argv[0] << " <video_path>" << std::endl;return -1;}cv::VideoCapture cap(argv[1]);if(!cap.isOpened()) {std::cerr << "Error: Couldn't open the video file." << std::endl;return -1;}cv::Mat oldFrame, oldGray;std::vector<cv::Point2f> oldCorners;// Parameters for Shi-Tomasi corner detectionint maxCorners = 100;double qualityLevel = 0.3;double minDistance = 7;int blockSize = 7;cap >> oldFrame;cv::cvtColor(oldFrame, oldGray, cv::COLOR_BGR2GRAY);// Detect corners in the first framecv::goodFeaturesToTrack(oldGray, oldCorners, maxCorners, qualityLevel, minDistance, cv::Mat(), blockSize);// Color for optical flowcv::Scalar color(0, 255, 0);  // Greenwhile(true) {cv::Mat frame, gray;cap >> frame;if(frame.empty()) {break;}cv::cvtColor(frame, gray, cv::COLOR_BGR2GRAY);std::vector<cv::Point2f> newCorners;std::vector<uchar> status;std::vector<float> err;// Calculate optical flow using Lucas-Kanade methodcv::calcOpticalFlowPyrLK(oldGray, gray, oldCorners, newCorners, status, err);// Draw the motion vectorsfor(size_t i = 0; i < oldCorners.size(); i++) {if(status[i]) {cv::line(frame, oldCorners[i], newCorners[i], color, 2);cv::circle(frame, newCorners[i], 5, color, -1);}}// Display the resultcv::imshow("Optical Flow - Lucas-Kanade", frame);if(cv::waitKey(30) == 27) {  // Exit on pressing 'Esc' keybreak;}// Update the previous frame and cornersoldGray = gray.clone();oldCorners = newCorners;}cap.release();cv::destroyAllWindows();return 0;
}

这篇关于OpenCV 光流法总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/985006

相关文章

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元