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

相关文章

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

在Java中使用OpenCV实践

《在Java中使用OpenCV实践》用户分享了在Java项目中集成OpenCV4.10.0的实践经验,涵盖库简介、Windows安装、依赖配置及灰度图测试,强调其在图像处理领域的多功能性,并计划后续探... 目录前言一 、OpenCV1.简介2.下载与安装3.目录说明二、在Java项目中使用三 、测试1.测

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

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用