光流法-运动目标的检测(opencv学习)
来源:互联网 发布:java条件语句 编辑:程序博客网 时间:2024/05/24 07:33
cvCalcOpticalFlowPyrLK 函数在使用时,首先要确定特征点,也就是目标旧的位置。
本程序通过使用cvGoodFeaturesToTrack 函数选择角点作为特征点。
本程序只是一个简单的运动检测,在具体应用过程中,可以根据自己的需要修正
#include <cv.h>
#include <highgui.h>
int main (int argc, char **argv)
{
CvCapture* capture = 0;
capture = cvCaptureFromCAM( CV_CAP_ANY );
int i;
int corner_count = 1000;
CvTermCriteria criteria;
criteria = cvTermCriteria (CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 64, 0.01);
IplImage *src_img1;
IplImage *src_img2;
IplImage *dst_img;
IplImage *pre_img;
IplImage *eig_img;
IplImage *temp_img;
IplImage *prev_pyramid;
IplImage *curr_pyramid;
CvPoint2D32f *corners1;
CvPoint2D32f *corners2;
corners1 = (CvPoint2D32f *) cvAlloc (corner_count * sizeof (CvPoint2D32f));
corners2 = (CvPoint2D32f *) cvAlloc (corner_count * sizeof (CvPoint2D32f));
cvNamedWindow ("Image", 1);
char *status;
status = (char *) cvAlloc (corner_count);
while (1)
{
pre_img = cvQueryFrame(capture);
CvSize img_sz = cvGetSize(pre_img);
src_img1 = cvCreateImage(img_sz, IPL_DEPTH_8U, 1);
cvCvtColor(pre_img, src_img1, CV_RGB2GRAY);
dst_img = cvQueryFrame(capture);
src_img2 = cvCreateImage(img_sz, IPL_DEPTH_8U, 1);
cvCvtColor(dst_img, src_img2, CV_RGB2GRAY);
eig_img = cvCreateImage (img_sz, IPL_DEPTH_32F, 1);
temp_img = cvCreateImage (img_sz, IPL_DEPTH_32F, 1);
prev_pyramid = cvCreateImage (cvSize (src_img1->width + 8, src_img1->height / 3), IPL_DEPTH_8U, 1);
curr_pyramid = cvCreateImage (cvSize (src_img1->width + 8, src_img1->height / 3), IPL_DEPTH_8U, 1);
cvGoodFeaturesToTrack (src_img1, eig_img, temp_img, corners1, &corner_count, 0.001, 5, NULL);
cvCalcOpticalFlowPyrLK (src_img1, src_img2, prev_pyramid, curr_pyramid,
corners1, corners2, corner_count, cvSize (10, 10), 4, status, NULL, criteria, 0);
for (i = 0; i < corner_count; i++)
{
if (status[i])
cvLine (dst_img, cvPointFrom32f (corners1[i]), cvPointFrom32f (corners2[i]), CV_RGB (255, 0, 0), 1, CV_AA, 0);
}
cvShowImage ("Image", dst_img);
cvWaitKey (1);
cvReleaseImage (&src_img1);
cvReleaseImage (&src_img2);
cvReleaseImage (&eig_img);
cvReleaseImage (&temp_img);
cvReleaseImage (&prev_pyramid);
cvReleaseImage (&curr_pyramid);
}
cvDestroyWindow ("Image");
cvReleaseImage (&dst_img);
cvReleaseImage(&pre_img);
return 0;
}
- 光流法-运动目标的检测(opencv学习)
- 光流法-运动目标的检测二(opencv学习)
- opencv学习---运动目标(前景)检测
- 新手学习opencv十一:运动目标(前景)检测
- OpenCV运动目标检测
- opencv 运动目标检测
- OpenCV实现运动目标检测的函数
- 我的OpenCV学习笔记(3):基于混合高斯模型GMM的运动目标检测
- OpenCV学习之寻找轮廓实现视频流的运动目标检测
- 运动目标检测--光流法
- 运动目标检测--光流法
- OpenCV实现静止背景下运动目标的检测
- OpenCV实现静止背景下运动目标的检测
- OpenCV之基于GMM的运动目标检测
- 【OPENCV】基于背景差法的运动目标检测
- OpenCV实现静止背景下运动目标的检测
- 基于OpenCV和Android的运动目标检测系统
- 【Python+OpenCV】目标跟踪-实现基本的运动检测
- css属性大全
- JavaScript事件event对象属性
- ora-00600: 内部错误代码, 参数: [4415], [], [], [], [], [], [], [], [], [], [], []
- i2c--test
- 粒子滤波的程序
- 光流法-运动目标的检测(opencv学习)
- java 中 时间总结
- 光流法-运动目标的检测二(opencv学习)
- Parencodings
- 函数指针的经典应用
- cvCreateVideoWriter函数使用
- git服务端和客户端分支相同时,客户端提交的更新服务端无法生效解决方案
- mongoDB配置
- 通过sax2写Action() 调用来读http://...xml 信息(sax2)