OpenCV之帧差法检测运动目标
来源:互联网 发布:淘宝在线装修工具 编辑:程序博客网 时间:2024/05/24 07:35
今天的目标是用OpenCV实现对运动目标的检测,这里选用三帧帧差法。代码如下:
#include <opencv2/opencv.hpp>#include <cv.h>#include <highgui.h>#include <stdio.h>#include <ctype.h>double Threshold_index=0;const int CONTOUR_MAX_AERA = 200;void trackbar(int pos){Threshold_index=(double)pos;}int main(int argc, char* argv[]){CvCapture *capture=cvCaptureFromCAM(0);int n_cnt=0;IplImage *img=NULL,*img_gray1=NULL,*img_gray2=NULL,*img_gray3=NULL,*img_diff1=NULL,*img_diff2=NULL,*img_diff_and=NULL,*img_binary=NULL,*img_dilate=NULL;CvMemStorage *stor;CvSeq *cont;stor=cvCreateMemStorage(0);cont=cvCreateSeq(CV_SEQ_ELTYPE_POINT,sizeof(CvSeq),sizeof(CvPoint),stor);cvNamedWindow("test",CV_WINDOW_AUTOSIZE);cvNamedWindow("dilate",CV_WINDOW_AUTOSIZE);img=cvQueryFrame(capture);img_gray1=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);img_gray2=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);img_gray3=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);img_diff1=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);img_diff2=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);img_diff_and=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);img_binary=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);img_dilate=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);int index=1;cvCreateTrackbar("Threshold","test",&index,255,trackbar);while(img=cvQueryFrame(capture)){if(n_cnt%3==0)cvCvtColor(img,img_gray1,CV_BGR2GRAY);else if(n_cnt%3==1)cvCvtColor(img,img_gray2,CV_BGR2GRAY);else if(n_cnt%3==2)cvCvtColor(img,img_gray3,CV_BGR2GRAY);char c=(char)cvWaitKey(25);if(c==27)break;if(n_cnt>3){cvAbsDiff(img_gray1,img_gray2,img_diff1);cvAbsDiff(img_gray2,img_gray3,img_diff2);cvAnd(img_diff1,img_diff2,img_diff_and);cvThreshold(img_diff_and,img_binary,Threshold_index,255,CV_THRESH_BINARY);cvShowImage("test",img_binary);cvDilate(img_binary,img_dilate);//cvShowImage("dilate",img_dilate);cvFindContours(img_dilate,stor,&cont,sizeof(CvContour),CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0));for(;cont;cont = cont->h_next){CvRect r = ((CvContour*)cont)->rect;//子类转换为父类例子if(r.height * r.width > CONTOUR_MAX_AERA) // 面积小的方形抛弃掉{cvRectangle(img, cvPoint(r.x,r.y), cvPoint(r.x + r.width, r.y + r.height),CV_RGB(255,0,0), 1, CV_AA,0);}}cvShowImage("dilate",img);}if(c=='s'){cvSaveImage("d:/img.bmp",img);cvSaveImage("d:/img_binary.bmp",img_dilate);}n_cnt++;}cvDestroyAllWindows();cvReleaseCapture(&capture);cvReleaseImage(&img_gray1);cvReleaseImage(&img_gray2);cvReleaseImage(&img_gray3);cvReleaseImage(&img_diff1);cvReleaseImage(&img_diff2);cvReleaseImage(&img_diff_and);cvReleaseImage(&img_binary);cvReleaseImage(&img_dilate);cvReleaseMemStorage(&stor);return 0;}
下图是检测的运动目标二值化图像以及在实际图像中叠加的矩形框效果图。
0 0
- OpenCV之帧差法检测运动目标
- 【opencv】基于opencv实现运动目标检测之帧差法
- OpenCV运动目标检测
- opencv 运动目标检测
- opencv程序十七:运动目标检测之背景减除法
- opencv程序十八:运动目标检测之两帧差分法
- opencv程序十八:运动目标检测之三帧差分法
- OpenCV之基于GMM的运动目标检测
- Opencv之二帧差法运动目标检测与轮廓提取
- 运动目标检测 帧差法
- OpenCV实现运动目标检测的函数
- Opencv运动目标检测常用方法
- opencv学习---运动目标(前景)检测
- 运动目标检测_帧差法
- OpenCV学习之寻找轮廓实现视频流的运动目标检测
- opencv之运动目标动作分割
- OpenCV之光流法跟踪运动目标
- C++利用帧差法背景差分实现运动目标检测(opencv)
- Integer与int的种种比较你知道多少?
- Spring3.2.3 MVC多视图解析实例
- 汇编中的of,cf标志寄存器有符号和没符号的区别
- 根目录下README文档翻译
- gWT 编译
- OpenCV之帧差法检测运动目标
- java中equals,hashcode和==的区别
- modem通讯连接过程
- php 验证身份证号码
- 哈弗曼编码和译码.cpp
- ORACLE DUL/PRM常见问题汇总FAQ
- HDOJ 1297 Children’s Queue
- 排序(6)---------归并排序(C语言实现)
- [杭电]Fibonacci Again