介绍
光流是由物体或照相机的运动引起的两个连续帧之间图像物体视在运动的模式。它是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
运行结果截图
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
OpenCV
+关注
关注
29文章
624浏览量
41212 -
python
+关注
关注
55文章
4766浏览量
84369 -
printf函数
+关注
关注
0文章
31浏览量
5878
发布评论请先 登录
相关推荐
ELF 1技术贴|如何在Ubuntu中编译OpenCV库
在之前发布的文章中探讨了交叉编译OpenCV并部署至嵌入式系统的方法。然而,在调试阶段,我们发现在Ubuntu环境下将OpenCV编译为X86架构可能更加方便和高效。通过在主机上编译并使用X86架构
【教程】通俗讲法告诉你什么是光流Optical Flow,附算法
学者重视。 还是回归应用吧,目前OpenCV中实现了不少的光流算法。1. calcOpticalFlowPyrLK通过金字塔Lucas-Ka
发表于 06-02 17:18
OpenCV中的BGR格式,在libyuv中对应的那个格式?OpenCV中的RGB格式呢?
OpenCV中的BGR格式,在libyuv中对应的那个格式?OpenCV中的RGB格式呢?
发表于 09-19 06:00
在Vivado中如何实现OpenCV设计
观看视频,了解OpenCV库和其在一些典型应用中的使用,以及Zynq-7000 SoC的优点和如何实现OpenCV设计。同时您还能学习到如何在
OpenCV库的特点和主要功能及实现光流方法的运动说明
序列图像的光流计算是计算机视觉研究领域运动估计的重要组成部分。本文介绍了OpenCV库的特点和主要功能,通过调用函数库中的金字塔Lucas—Kanade
发表于 10-15 11:56
•12次下载
OpenCV库的特点和功能与如何快速实现光流场的方法说明
序列图像的光流计算是计算机视觉研究领域运动估计的重要组成部分。本文介绍了0PenCV库的特点和主要功能,通过调用函数库中的金字塔Lucas-Kanade光
发表于 10-31 11:53
•3次下载
奥比中光与OpenCV成为战略合作伙伴
近日,奥比中光与OpenCV(OpenSource Computer Vision Library)签署《战略合作协议》,双方正式成为战略合作伙伴。OpenCV5.0规划纳入3D视觉技
OpenCV Webinar 2丨如何在OpenCV中调用Tengine推理,实现开发效率翻倍
这个月,OPEN AI LAB的合作伙伴OpenCV 20岁了!值此之际,OpenCV中国团队推出系列OpenCV Webinar,在全球范围内定期邀请OpenCV专家来作...
发表于 01-26 19:48
•3次下载
如何在OpenCV中实现CUDA加速
OpenCV4.x中关于CUDA加速的内容主要有两个部分,第一部分是之前OpenCV支持的图像处理与对象检测传统算法的CUDA加速;第二部分是OpenCV4.2版本之后开始支持的针对深
评论