#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
#include "cv.h"
#include "highgui.h"
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
//#include <iostream.h>
//using namespace std;
double TrianglArea( int x1,int y1,int x2, int y2, int x3,int y3);
double SquArea(int x1,int y1,int x2, int y2, int x3,int y3,int x4,int y4);
void detect_face(IplImage* dst_img,int* count);
// various tracking parameters (in seconds)
const double MHI_DURATION = 0.5;
const double MAX_TIME_DELTA = 0.5;
const double MIN_TIME_DELTA = 0.05;
const int N = 3;
//
const int CONTOUR_MAX_AERA = 16;
// ring image buffer
IplImage **buf = 0;
int last = 0;
int nFrmnum=1;
// 临时图像参数
IplImage *mhi = 0; // MHI: 运动历史图像
CvFilter filter = CV_GAUSSIAN_5x5; //采用5x5的高斯滤波模板
CvConnectedComp *cur_comp, min_comp;
CvConnectedComp comp;
CvMemStorage *storage;
CvPoint pt[4];
//检测出的感兴趣区域参数
IplImage* dst_img1=0; //定义感兴趣区域图像指针
//CvMemStorage *stor1;
//CvSeq *cont1;
IplImage *sub_buy=0;
//IplImage* sub_buy=0;
// 参数:
// img – 输入视频帧
// dst – 检测结果
void update_mhi( IplImage* img, IplImage* dst, int diff_threshold )
{
double timestamp = clock()/100.; // 获取当前时间
CvSize size = cvSize(img->width,img->height); // 获取当前帧的大小
int i, j, idx1, idx2;
int danger_x[4]; //定义危险区域的边界顶点坐标
int danger_y[4];
int obj_x[100][4];
int obj_y[100][4];
int objArea=0;
int numobj=0; //定义检测到的目标数量
double ratio1,ratio2;
//int danger_x2;
//int danger_y2;
//int danger_x3;
//int danger_y3;
//int danger_x4;
//int danger_y4;
int danger_width=60; //定义危险区域的宽度
int danger_length=40; //定义危险区域的长度
double T_area1,T_area2,T_area3,T_area4,Sb; //定义计算不规则四边形面积的所需要的变量
double Sf[4];
double F_area1[100],F_area2[100],F_area3[100],F_area4[100],St; //定义计算目标四边形面积的所需要的变量
double Sp[100][4];
char strSaveImagename[40] = "C:\\motiondetect\\"; //!保存图片的目录名
char strTmp[20];
IplImage* silh; //定义帧间差分图像指针
IplImage* Bimg=0; //定义感兴趣区域图像指针
//uchar val;
//float temp;
IplImage* pyr = cvCreateImage( cvSize((size.width & -2)/2, (size.height & -2)/2), 8, 1 );
CvMemStorage *stor;
CvSeq *cont;// *result, *squares;
//CvSeqReader reader;
double Y;//,Cr,Cb;
if( !mhi || mhi->width != size.width || mhi->height != size.height )
{
if( buf == 0 )
{
buf = (IplImage**)malloc(N*sizeof(buf[0]));
memset( buf, 0, N*sizeof(buf[0]));
}
for( i = 0; i < N; i++ )
{
cvReleaseImage( &buf[i] );
buf[i] = cvCreateImage( size, IPL_DEPTH_8U, 1 );
cvZero( buf[i] );
}
cvReleaseImage( &mhi );
mhi = cvCreateImage( size, IPL_DEPTH_32F, 1 );
cvZero( mhi ); // clear MHI at the beginning
} // end of if(mhi)
cvCvtColor( img, buf[last], CV_BGR2GRAY ); // convert frame to grayscale
idx1 = last;
idx2 = (last + 1) % N; // index of (last - (N-1))th frame
last = idx2;
// 做帧差
silh = buf[idx2];
cvAbsDiff( buf[idx1], buf[idx2], silh ); // 帧间做差
// 对差图像做二值化
cvThreshold( silh, silh, 30, 255, CV_THRESH_BINARY ); // and threshold it
cvUpdateMotionHistory( silh, mhi, timestamp, MHI_DURATION ); // update MHI
cvCvtScale( mhi, dst, 255./MHI_DURATION,(MHI_DURATION - timestamp)*255./MHI_DURATION );
cvCvtScale( mhi, dst, 255./MHI_DURATION, 0 );
// 中值滤波,消除小的噪声
cvSmooth( dst, dst, CV_MEDIAN, 3, 0, 0, 0 );
// 向下采样,去掉噪声
cvPyrDown( dst, pyr, 7 );
cvDilate( pyr, pyr, 0, 1 ); // 做膨胀操作,消除目标的不连续空洞
cvPyrUp( pyr, dst, 7 );
//===================================================================================
// 下面的程序段用来找到轮廓
// Create dynamic structure and sequence.
stor = cvCreateMemStorage(0);
cont = cvCreateSeq(CV_SEQ_ELTYPE_POINT, sizeof(CvSeq), sizeof(CvPoint) , stor);
// 找到所有轮廓
numobj=cvFindContours( dst, stor, &cont, sizeof(CvContour),
CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
/*
for(;cont;cont = cont->h_next)
{
// Number point must be more than or equal to 6 (for cvFitEllipse_32f).
if( cont->total < 6 )
continue;
// Draw current contour.
cvDrawContours(img,cont,CV_RGB(255,0,0),CV_RGB(255,0,0),0,1, 8, cvPoint(0,0));
} // end of for-loop: "cont"
*/
//在图像窗口中绘制一个危险区域
//========================================================================
//不规则四边形顶点坐标的初始化
danger_x[0]=40;
danger_y[0]=10;
danger_x[3]=100;
danger_y[3]=5;
danger_x[1]=danger_x[0]+danger_width;
danger_y[1]=danger_y[0]+danger_length;
danger_x[2]=danger_x[3]+danger_width-20;
danger_y[2]=danger_y[3]+danger_length;
//======================================================================
// 直接使用CONTOUR中的矩形来画轮廓
for(;cont;cont = cont->h_next)
{
CvRect r = ((CvContour*)cont)->rect;
CvFont font;
obj_x[numobj][0]=r.x;
obj_y[numobj][0]=r.y;
obj_x[numobj][1]=r.x;
obj_y[numobj][1]=r.y;
obj_x[numobj][2]=r.x;
obj_y[numobj][2]=r.y;
obj_x[numobj][3]=r.x;
obj_y[numobj][3]=r.y;
for(j=0;j<4;j++)
{
T_area1=TrianglArea( danger_x[j],danger_y[j],r.x+r.width,r.y, r.x,r.y);
T_area2=TrianglArea( danger_x[j],danger_y[j],r.x+r.width,r.y,r.x,r.y+r.height);
T_area3=TrianglArea( danger_x[j],danger_y[j],r.x,r.y+r.height,r.x+r.width,r.y+r.height);
T_area4=TrianglArea( danger_x[j],danger_y[j],r.x+r.width,r.y+r.height, r.x,r.y);
Sf[j]=T_area1+T_area2+T_area3+T_area4;
}
Sb=SquArea( r.x,r.y,r.x+r.width,r.y,r.x,r.y+r.height,r.x+r.width,r.y+r.height); //计算划定的危险区域的面积
//cvSetImageROI(img, cvRect( r.x,r.y,r.x+r.width,r.y+r.height)); //设置检测出来的感兴趣的区域
//cvShowImage("img",img);
for(j=0;j<4;j++)
{
F_area1[numobj]=TrianglArea( danger_x[0],danger_y[0],danger_x[1],danger_y[1], obj_x[numobj][j],obj_y[numobj][j]);
F_area2[numobj]=TrianglArea( danger_x[2],danger_y[2],danger_x[1],danger_y[1], obj_x[numobj][j],obj_y[numobj][j]);
F_area3[numobj]=TrianglArea( danger_x[2],danger_y[2],danger_x[3],danger_y[3], obj_x[numobj][j],obj_y[numobj][j]);
F_area4[numobj]=TrianglArea( danger_x[3],dange
没有合适的资源?快使用搜索试试~ 我知道了~
Opencv基于VC++开发的视频入侵检测预警程序.rar
共72个文件
jpg:46个
avi:5个
manifest:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 116 浏览量
2022-04-18
20:19:45
上传
评论
收藏 37.2MB RAR 举报
温馨提示
Opencv基于VC++开发的视频入侵检测预警程序 Opencv基于VC++开发的视频入侵检测预警程序
资源推荐
资源详情
资源评论
收起资源包目录
Opencv基于VC++开发的视频入侵检测预警程序.rar (72个子文件)
motiondetec1t
SaveImage_41.jpg 32KB
motiondetect.vcproj 5KB
SaveImage_13.jpg 29KB
SaveImage_18.jpg 31KB
SaveImage_33.jpg 35KB
SaveImage_6.jpg 31KB
SaveImage_3.jpg 32KB
SaveImage_7.jpg 30KB
SaveImage_27.jpg 32KB
SaveImage_10.jpg 29KB
SaveImage_30.jpg 34KB
SaveImage_9.jpg 29KB
SaveImage_29.jpg 34KB
motiondetect.ncb 15.07MB
SaveImage_35.jpg 35KB
SaveImage_5.jpg 32KB
SaveImage_20.jpg 32KB
SaveImage_26.jpg 32KB
SaveImage_25.jpg 32KB
motiondetect.c 15KB
SaveImage_37.jpg 34KB
SaveImage_37.jpgSaveImage_38.jpg 32KB
SaveImage_19.jpg 32KB
SaveImage_34.jpg 35KB
motiondetect.sln 889B
motiondetect.dsw 549B
SaveImage_22.jpg 32KB
SaveImage_38.jpg 34KB
motiondetect.vcproj.7AB468BD458041D.jzhang.user 1KB
SaveImage_23.jpg 32KB
motiondetect.dsp 4KB
motiondetect.suo 14KB
SaveImage_31.jpg 34KB
SaveImage_8.jpg 30KB
SaveImage_40.jpg 34KB
SaveImage_32.jpg 34KB
SaveImage_35.jpgSaveImage_36.jpg 33KB
Thumbs.db 173KB
SaveImage_17.jpg 31KB
SaveImage_15.jpg 30KB
SaveImage_4.jpg 31KB
SaveImage_21.jpg 32KB
SaveImage_16.jpg 30KB
Makefile 140B
SaveImage_1.jpg 30KB
SaveImage_39.jpg 34KB
SaveImage_12.jpg 29KB
SaveImage_41.jpgSaveImage_42.jpg 32KB
Debug
S6006320.AVI 7.96MB
3.avi 8.13MB
motiondetect.obj 42KB
BuildLog.htm 9KB
Sp.avi 624KB
motiondetect.exe.intermediate.manifest 381B
motiondetect.exe.embed.manifest.res 472B
vc90.pdb 84KB
vc90.idb 147KB
videolongxvid.avi 12.19MB
mt.dep 67B
motiondetect.exe.embed.manifest 406B
motiondetect.ilk 1.13MB
motiondetect.exe 511KB
motiondetect.pdb 2MB
people.AVI 4.51MB
SaveImage_24.jpg 32KB
SaveImage_2.jpg 31KB
SaveImage_11.jpg 29KB
SaveImage_28.jpg 34KB
SaveImage_39.jpgSaveImage_40.jpg 33KB
SaveImage_36.jpg 35KB
SaveImage_38.jpgSaveImage_39.jpg 33KB
SaveImage_14.jpg 30KB
共 72 条
- 1
资源评论
- wx0988780990062022-07-22这个资源值得下载,资源内容详细全面,与描述一致,受益匪浅。
stbomei
- 粉丝: 41
- 资源: 1234
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功