OpenCV 使用光流法检测物体运动
OpenCV 可以使用光流法检测物体运动,贴上代码以及效果。
// opticalflow.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"// Example 10-1. Pyramid Lucas-Kanade optical flow code
//
/* *************** License:**************************Oct. 3, 2008Right to use this code in any way you want without warrenty, support or any guarentee of it working.BOOK: It would be nice if you cited it:Learning OpenCV: Computer Vision with the OpenCV Libraryby Gary Bradski and Adrian KaehlerPublished by O'Reilly Media, October 3, 2008AVAILABLE AT: http://www.amazon.com/Learning-OpenCV-Computer-Vision-Library/dp/0596516134Or: http://oreilly.com/catalog/9780596516130/ISBN-10: 0596516134 or: ISBN-13: 978-0596516130 OTHER OPENCV SITES:* The source code is on sourceforge at:http://sourceforge.net/projects/opencvlibrary/* The OpenCV wiki page (As of Oct 1, 2008 this is down for changing over servers, but should come back):http://opencvlibrary.sourceforge.net/* An active user group is at:http://tech.groups.yahoo.com/group/OpenCV/* The minutes of weekly OpenCV development meetings are at:http://pr.willowgarage.com/wiki/OpenCV************************************************** */#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <stdio.h>const int MAX_CORNERS = 500;
int main(int argc, char** argv) {// Initialize, load two images from the file system, and// allocate the images and other structures we will need for// results.//IplImage* imgA = cvLoadImage("OpticalFlow0.jpg",CV_LOAD_IMAGE_GRAYSCALE);IplImage* imgB = cvLoadImage("OpticalFlow1.jpg",CV_LOAD_IMAGE_GRAYSCALE);CvSize img_sz = cvGetSize( imgA );int win_size = 10;IplImage* imgC = cvLoadImage("OpticalFlow1.jpg",CV_LOAD_IMAGE_UNCHANGED);// The first thing we need to do is get the features// we want to track.//IplImage* eig_image = cvCreateImage( img_sz, IPL_DEPTH_32F, 1 );IplImage* tmp_image = cvCreateImage( img_sz, IPL_DEPTH_32F, 1 );int corner_count = MAX_CORNERS;CvPoint2D32f* cornersA = new CvPoint2D32f[ MAX_CORNERS ];cvGoodFeaturesToTrack(imgA,eig_image,tmp_image,cornersA,&corner_count,0.01,5.0,0,3,0,0.04);cvFindCornerSubPix(imgA,cornersA,corner_count,cvSize(win_size,win_size),cvSize(-1,-1),cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03));// Call the Lucas Kanade algorithm//char features_found[ MAX_CORNERS ];float feature_errors[ MAX_CORNERS ];CvSize pyr_sz = cvSize( imgA->width+8, imgB->height/3 );IplImage* pyrA = cvCreateImage( pyr_sz, IPL_DEPTH_32F, 1 );IplImage* pyrB = cvCreateImage( pyr_sz, IPL_DEPTH_32F, 1 );CvPoint2D32f* cornersB = new CvPoint2D32f[ MAX_CORNERS ];cvCalcOpticalFlowPyrLK(imgA,imgB,pyrA,pyrB,cornersA,cornersB,corner_count,cvSize( win_size,win_size ),5,features_found,feature_errors,cvTermCriteria( CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, .3 ),0);// Now make some image of what we are looking at://for( int i=0; i<corner_count; i++ ) {if( features_found[i]==0|| feature_errors[i]>550 ) {// printf("Error is %f/n",feature_errors[i]);continue;}// printf("Got it/n");CvPoint p0 = cvPoint(cvRound( cornersA[i].x ),cvRound( cornersA[i].y ));CvPoint p1 = cvPoint(cvRound( cornersB[i].x ),cvRound( cornersB[i].y ));cvLine( imgC, p0, p1, CV_RGB(255,0,0),2 );}cvNamedWindow("ImageA",0);cvNamedWindow("ImageB",0);cvNamedWindow("LKpyr_OpticalFlow",0);cvShowImage("ImageA",imgA);cvShowImage("ImageB",imgB);cvShowImage("LKpyr_OpticalFlow",imgC);cvWaitKey(0);return 0;
}
两张测试图片:
OpticalFlow0.jpg
OpticalFlow1.jpg
运行结果:
OpenCV 使用光流法检测物体运动相关推荐
- python笛卡尔转换极坐标_[4] opencv: pythonDIS光流法与笛卡尔坐标转为极坐标
[4] opencv: pythonDIS光流法与笛卡尔坐标转为极坐标 [4] opencv: pythonDIS光流法与笛卡尔坐标转为极坐标 目录1, 笛卡尔转为极坐标 2, DIS光流算法 1, ...
- 光流法的三维运动表示
光流法的三维运动表示 1. 简介 Lucas-Kanade 光流 单像素算法 最小二乘获得运动轨迹 2. 三维运动表示 Reference: 高翔,张涛 <视觉SLAM十四讲> GILAD ...
- OpenCV之光流法运动目标跟踪
[光流Optical Flow]的概念是Gibson在1950年首先提出来的.它是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一 ...
- python opencv入门 光流法(41)
内容来自OpenCV-Python Tutorials 自己翻译整理 目标: 了解光流的概念,使用lucas-kanade估算方法 使用cv2.calcOpticalFlowPyrLK() 方法来追踪 ...
- opencv c++ 光流法、稀疏光流法、稠密光流法、均值迁移追踪(meanshift、camshift)
1.概念 参考: (70条消息) 什么是光流法_张年糕慢慢走的博客-CSDN博客_光流法 (70条消息) 计算机视觉--光流法(optical flow)简介_T-Jhon的博客-CSDN博客_光流法 ...
- 光流 | 基于光流法检测跟踪视频中的汽车
===================================================== github:https://github.com/MichaelBeechan CSDN: ...
- 运动目标检测__光流法
以下内容摘自一篇硕士论文<视频序列中运动目标检测与跟踪算法的研究>: 1950年Gibson首先提出了光流的概念,光流(optical flow)法是空间运动物体在观测成像面上的像素运动的 ...
- opencv 稀疏光流 稠密光流
opencv 稀疏光流 稠密光流 demo: http://download.csdn.net/detail/keen_zuxwang/9860696 参看.学习文档: OpenCV学习笔记(七)Lu ...
- HALCON:Optical Flow(光流法)
HALCON:Optical Flow(光流法) 光流法基本原理 光流概念由Gibson在1950年首先提出来,它是一种简单实用的图像运动表达方式,通常定义为一个图像序列中图像亮度模式的表观运动,即空 ...
最新文章
- 沃尔玛开设智慧零售实验室,正面硬刚 Amazon Go
- 浅谈单片机程序设计中的“分层思想”
- 关于Linux下进程创建的相关知识
- 北京python培训班价格-北京Python编程培训多少钱
- 规范化的递归转换成非递归
- CAS机制中的ABA问题
- python和对象复习_面向对象阶段复习
- GenericServlet接口
- java费波拉切_面试题 - 不再犯错 - 博客园
- PHP获取表单数据的方法有几种,如何实现PHP获取表单数据与HTML嵌入PHP脚本
- 计算机能力提升研修总结ppt,信息技术能力提升研修总结
- windows做ntp server,linux做ntp client端的配置方法
- aioserve oracle,oracle进程关不掉的问题??新手问题
- 个人计算机硬件构成的叙述正确的是,2010年职称计算机考试模拟试题及答案(计算机基础)2...
- 地图距离算法_基于权重的地图匹配技术
- CS224N刷题——Assignment1.4_情感分析
- 服务器重装系统需要按什么,安装服务器系统前我们该做些什么
- SI9000阻抗计算教程
- Java软件工程师职业规划
- 第1章第15节:导出:如何将幻灯片保存为图片格式的文件 [PowerPoint精美幻灯片实战教程]
热门文章
- Android小项目之--应用解析 Content Provider-内容提供商(附源码)
- CCF201912-4 区块链(100分)【模拟】
- Bailian3175 验证极限【数学】
- Bailian2811 熄灯问题【暴力】
- UVA654 LA5508 POJ1079 Ratio【暴力】
- 家谱等人物关系图的绘制
- 视频、画面、语言、文字与脑海、心灵
- CRT(C Runtime Library)—— C/C++运行时库
- numpy.ndarray.flat/flatten 与 Spark 下的 flatMap
- 标准模板库(STL)之 map 列传