资源简介
基于Opencv的红外运动目标识别与跟踪,内附红外演示与源代码。
代码片段和文件信息
#include “cv.h“
#include “highgui.h“
#include
#include
#include
#include
#include
#include
#include
//跟踪参数
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 = 100;//矩形面积
IplImage **buf = 0;
int last = 0;
int flag;
IplImage *mhi = 0; // MHI: motion history image
CvConnectedComp *cur_comp min_comp;
CvConnectedComp comp;
CvMemStorage *storage;
CvPoint pt[4];
// 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 idx1 idx2;
IplImage* silh;
IplImage* pyr = cvCreateImage(cvSize((size.width & -2) / 2 (size.height & -2) / 2) 8 1);
CvMemStorage *stor;
CvSeq *cont;
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);
}
cvCvtColor(img buf[last] CV_BGR2GRAY); //rgb->gray
idx1 = last;
idx2 = (last + 1) % N;
last = idx2;
// 做帧差
silh = buf[idx2];
cvAbsDiff(buf[idx1] buf[idx2] silh); //两帧差异
// 对差图像做二值化
cvThreshold(silh silh 30 255 CV_THRESH_BINARY); //src(xy)>threshold dst(xy) = max_value; 否则dst(xy)=0;
cvUpdateMotionHistory(silh mhi timestamp MHI_DURATION); //更新像素点的运动历史
cvCvtScale(mhi dst 255. / MHI_DURATION
(MHI_DURATION - timestamp)*255. / MHI_DURATION);//timestamp是时间戳;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);
// 找到所有轮廓
cvFindContours(dst stor &cont sizeof(CvContour)
CV_RETR_LIST CV_CHAIN_APPROX_SIMPLE cvPoint(0 0));
// 直接使用CONTOUR中的矩形来画轮廓
for (; cont; cont = cont->h_next)
{
flag = 0;
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);
flag = 1;
}
else
{
flag = 0;
}
}
cvReleaseMemStorage(&stor);
cvReleaseImage(&pyr);
}
int main(int argc char** argv)
{
IplImage* motion = 0;
CvCapture* capture = 0; //视频获取结构
while (1){
capture = cvCreateFileCapture(“D:\\IR_object\\IR3.avi“);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-06-05 10:32 红外目标识别与跟踪\
目录 0 2015-06-05 10:31 红外目标识别与跟踪\IR\
目录 0 2015-06-05 10:31 红外目标识别与跟踪\IR\Debug\
文件 67584 2015-05-25 17:12 红外目标识别与跟踪\IR\Debug\IR.exe
文件 676676 2015-05-25 17:12 红外目标识别与跟踪\IR\Debug\IR.ilk
文件 2027520 2015-05-25 17:12 红外目标识别与跟踪\IR\Debug\IR.pdb
目录 0 2015-06-05 10:31 红外目标识别与跟踪\IR\IR\
目录 0 2015-06-05 10:31 红外目标识别与跟踪\IR\IR\Debug\
文件 1423 2015-05-25 17:12 红外目标识别与跟踪\IR\IR\Debug\IR.log
文件 211923 2015-05-25 17:12 红外目标识别与跟踪\IR\IR\Debug\IR.obj
目录 0 2015-06-05 10:31 红外目标识别与跟踪\IR\IR\Debug\IR.tlog\
文件 35898 2015-05-25 17:12 红外目标识别与跟踪\IR\IR\Debug\IR.tlog\CL.read.1.tlog
文件 268 2015-05-25 17:12 红外目标识别与跟踪\IR\IR\Debug\IR.tlog\CL.write.1.tlog
文件 149 2015-05-25 17:12 红外目标识别与跟踪\IR\IR\Debug\IR.tlog\IR.lastbuildstate
文件 434 2015-05-25 17:12 红外目标识别与跟踪\IR\IR\Debug\IR.tlog\cl.command.1.tlog
文件 1464 2015-05-25 17:12 红外目标识别与跟踪\IR\IR\Debug\IR.tlog\li
文件 3984 2015-05-25 17:12 红外目标识别与跟踪\IR\IR\Debug\IR.tlog\li
文件 250 2015-05-25 17:12 红外目标识别与跟踪\IR\IR\Debug\IR.tlog\li
文件 1108992 2015-05-25 17:12 红外目标识别与跟踪\IR\IR\Debug\vc120.idb
文件 1339392 2015-05-25 17:12 红外目标识别与跟踪\IR\IR\Debug\vc120.pdb
文件 4331 2015-05-25 17:11 红外目标识别与跟踪\IR\IR\IR.cpp
文件 4793 2015-05-25 16:40 红外目标识别与跟踪\IR\IR\IR.vcxproj
文件 943 2015-05-25 16:40 红外目标识别与跟踪\IR\IR\IR.vcxproj.filters
文件 40173568 2015-06-04 18:23 红外目标识别与跟踪\IR\IR.sdf
文件 952 2015-05-25 16:37 红外目标识别与跟踪\IR\IR.sln
文件 15360 2015-06-04 18:23 红外目标识别与跟踪\IR\IR.v12.suo
文件 1675958 2012-10-31 11:05 红外目标识别与跟踪\IR.avi
文件 337142 2012-10-31 11:05 红外目标识别与跟踪\IR3.avi
文件 17408 2015-05-25 16:35 红外目标识别与跟踪\ms.v12.suo
评论
共有 条评论