(六)OpenCV视频分析与对象跟踪_05_稠密HF_光流的对象跟踪
2020-03-06 21:35
176 查看
- 移动对象跟踪三要素
外观模型、图像表示、移动模型 - 稠密光流-HF
calcOpticalFlowFarneback
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; void drawOpticalFlowHF(Mat& flow, Mat& dst); // 稠密光流不对特征点跟踪,而是每次扫描整幅图像,显示运动的像素点,所以稠密光流运算速度慢 //https://blog.csdn.net/weixin_41721222/article/details/83788382 int main(int argc, char** argv) { VideoCapture capture; capture.open("../path.avi"); if (!capture.isOpened()) { cout << "could not load video..." << endl; return -1; } Mat frame, gray; Mat pre_frame, pre_gray; Mat dst;//稠密光流的结果存储图像(等价于frame) Mat flow;//稠密光流的行,x和y位移数据 capture.read(frame);// 先取出第一帧图像 cvtColor(frame, pre_gray, COLOR_BGR2GRAY); // 从第二帧数据开始的每一帧都与第一帧进行比较 while (capture.read(frame)) { cvtColor(frame, gray, COLOR_BGR2GRAY); if (!pre_gray.empty()) { // 稠密光流跟踪 calcOpticalFlowFarneback(pre_gray,//输入前一帧图像 gray, //输入后一帧图像 flow,//输出的光流图像 0.5,//金字塔上下两层之间的尺度关系 3, //金字塔层数 15,//均值窗口大小,越大越能denoise并且能够检测快速移动目标,但会引起模糊运动区域 3,//迭代次数 5, 1.2, 0); cvtColor(pre_gray, dst, COLOR_GRAY2BGR);//灰度图像转成RGB图像 drawOpticalFlowHF(flow, dst);// 绘制跟踪 } //imshow("Video_demo", frame); imshow("Video_flow", dst); char c = waitKey(100); if (c == 27) { break; } } capture.release(); waitKey(0); return 0; } void drawOpticalFlowHF(Mat& flow, Mat& dst) { for (int row = 0; row < dst.rows; row++) { for (int col = 0; col < dst.cols; col++) { const Point2f flow_xy = flow.at<Point2f>(row, col);//flow保存的是每个像素点移动的距离 if (flow_xy.x > 1 || flow_xy.y > 1)// x或y方向移动了1个像素以上就表示该像素移动了 { //Point(col, row)为移动了的像素点的第一帧初始位置 //Point(cvRound(col + fxy.x), cvRound(row + fxy.y))为移动了的像素点的第N帧实时位置 line(dst, Point(col, row), Point(cvRound(col + flow_xy.x), cvRound(row + flow_xy.y)), Scalar(255, 0, 255), 1, 8); //circle(dst, Point(cvRound(col + flow_xy.x), cvRound(row + flow_xy.y)), 2, Scalar(255, 0, 255), 2, 8); circle(dst, Point(col, row), 2, Scalar(0, 255, 255), 1, 8);// 较第一帧移动的像素点 } } } return; }
输出结果:
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- OpenCV视频分析与对象跟踪C++(二)光流对象跟踪-稀疏光流、稠密光流
- OpenCV视频分析与对象跟踪C++(三)CAMShift对象跟踪
- OpenCV视频分析与对象跟踪C++(四)视频中移动对象统计
- OpenCV系列视频教程(6):视频分析与对象跟踪实战教程
- OpenCV视频分析与对象跟踪C++(一)视频读写、背景消除建模(BSM)、对象检测与跟踪(基于颜色)
- (六)OpenCV视频分析与对象跟踪_09_扩展模块中的多对象跟踪
- (六)OpenCV视频分析与对象跟踪_07_视频中移动对象统计
- OpenCV 视频跟踪系统的框架分析
- 视频分析与对象跟踪(二)(稀疏光流-KLT)
- OpenCV学习之运动分析与对象跟踪
- 用 Python 和 OpenCV 检测和跟踪运动对象
- opencv 将视频读为图片放在指定文件夹中/将指定文件夹中图片读出并合成视频 cvCreateVideoWriter试分析
- opencv运动视频跟踪
- OpenCV【6】---使用均值漂移(Mean Shift)算法实时跟踪视频流中的物体
- BT源代码学习心得(七):跟踪服务器(Tracker)的代码分析(HTTP协议处理对象) -- 转贴自 wolfenstein (NeverSayNever)
- BT源代码学习心得(七):跟踪服务器(Tracker)的代码分析(HTTP协议处理对象)
- 3 视频里weekend05、06、07的可靠性 + HA原理、分析、机制 + weekend01、02、03、04、05、06、07的分布式集群搭建
- OpenCV视频目标跟踪示例教程(Meanshift)
- 用 Python 和 OpenCV 检测和跟踪运动对象
- Opencv读取视频一闪而过情况分析