资源简介
实现了静态背景下多目标的跟踪,并进行了可视化的跟踪效果,用矩形框框起了运动目标,并赋予了ID编号,还实现了另一种多目标跟踪算法
代码片段和文件信息
// Capture.cpp : 定义控制台应用程序的入口点。
//
#include “stdafx.h“
#include
#include
//#include
#include
#include
#include
#include “string.h“
#define OTSU_THRESHOLD_MIN 15
#define OTSU_THRESHOLD_RET -15
/*****************动态生成二值化阈值******************/
int cvOSTU(IplImage *src)
{
int deltaT = 0;
uchar grayflag = 1;
IplImage *gray = NULL;
if(src->nChannels != 1)//注意这里将源图像变灰
{
gray = cvCreateImage(cvGetSize(src) 8 1);
cvCvtColor(src gray CV_BGR2GRAY);
grayflag = 0;
}
else gray = src;
uchar* ImgData = (uchar*)(gray->imageData);
int thresholdValue = 1; //阈值
int ihist[256]; //图像直方图,256个点
int gmax = 255 gmin = 0;//最亮与最暗像素值
int i imgsize; //循环变量与图像尺寸
int n n1 n2; //n:非零像素个数,n1:前景像素个数 n2:背景像素个数
double m1 m2 sum csum fmax sb; //m1:前景灰度均值 m2:背景灰度均值。
//对直方图置零
memset(ihist 0 sizeof(ihist));
//生成直方图
imgsize = (gray->widthStep)*(gray->height); //图像数据总数
for (i = 0; i < imgsize; i ++)
{
ihist[((int)(*ImgData)) & 255] ++; //灰度统计
ImgData ++; //下一个像素
if((int)(*ImgData) > gmax)
gmax = (int)(*ImgData);
if((int)(*ImgData) < gmin)
gmin = (int)(*ImgData);
}
//设置参数
sum = csum = 0.0;
n = 0;
for (i = 0; i <= 255; i ++){
sum += (double)i * (double)ihist[i];//x*f(x)质量矩
n += ihist[i]; //f(x)质量,n:总灰度值
}
//加入光照调节参数
deltaT = (int)( sum / imgsize );//背景像素个数,deltaT:光照调节参数
deltaT = deltaT>>1;//pal值校正△T
if (!n){
//如果图像全黑,输出警告与结果
printf (“NOT NORMAL thresholdValue=160\n“);
return (160);
}
// OTSU算法:
fmax = -1.0;
n1 = 0;
for (i = 0; i < 255; i++)
{
n1 += ihist[i]; //前景像素个数
if (!n1) {continue;}
n2 = n - n1; //背景像素个数
if (n2 == 0) {break;}
csum += (double)i * ihist[i]; //前景总灰度
m1 = csum / n1; //前景灰度均值
m2 = (sum - csum)/n2; //背景灰度均值
sb = (double)n1 * (double)n2 * (m1 - m2) * (m1 - m2); //类间方差
/*这里是原理形式,可以被优化*/
if ( sb > fmax )
{
fmax = sb;
thresholdValue = i;//得到使类间方差最大的阈值T
}
}
if(!grayflag)
cvReleaseImage(&gray);
if(thresholdValue < OTSU_THRESHOLD_MIN)
return OTSU_THRESHOLD_MIN;
return(thresholdValue - deltaT + OTSU_THRESHOLD_RET );//根据情况修改修正变量
}
/**************************基于运动模板的跟踪算法****************************/
void cvUpdateMHI( IplImage* img IplImage* dst)
{
float MHI_DURATION = 0.5;
const double MAX_TIME_DELTA = 0.25;
const double MIN_TIME_DELTA = 0.05;
char ID_T[50] = {0};
double timestamp = clock()/1000.; // clock返回毫秒值,这里转换为秒为单位
CvSize size=cvSize( img->width img->height ); // get current frame size
int i;
IplImage* silh = NULL;
IplImage* mhi = NULL;
IplImage* orient = NULL;
IplImage* segmask = NULL;
IplImage* mask = NULL;
CvSeq* seq;
CvRect comp_rect;
double count;
double angle;
CvPoint center;
double magnitude;
CvScalar color;
CvFont font;
CvMemStorage* storage = 0;
// allocate images at the beg
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 13690 2017-11-23 16:35 Video处理\Capture\Capture.cpp
文件 4777 2011-02-23 16:13 Video处理\Capture\Capture.vcproj
文件 1427 2011-06-09 23:27 Video处理\Capture\Capture.vcproj.PC-20100809AYSR.Administrator.user
文件 1417 2012-08-07 16:21 Video处理\Capture\Capture.vcproj.xiao-THINK.xiao.user
文件 6024 2017-11-23 16:33 Video处理\Capture\Capture.vcxproj
文件 1295 2017-11-23 16:25 Video处理\Capture\Capture.vcxproj.filters
文件 143 2017-11-23 16:25 Video处理\Capture\Capture.vcxproj.user
文件 4476 2011-07-10 18:59 Video处理\Capture\Debug\BuildLog.htm
文件 403 2011-02-28 20:29 Video处理\Capture\Debug\Capture.exe.em
文件 468 2017-11-23 16:33 Video处理\Capture\Debug\Capture.exe.em
文件 385 2011-06-07 16:51 Video处理\Capture\Debug\Capture.exe.intermediate.manifest
文件 66 2017-11-23 16:35 Video处理\Capture\Debug\Capture.lastbuildstate
文件 2440 2017-11-23 16:35 Video处理\Capture\Debug\Capture.log
文件 156262 2017-11-23 16:35 Video处理\Capture\Debug\Capture.obj
文件 1179648 2017-11-23 16:33 Video处理\Capture\Debug\Capture.pch
文件 0 2017-11-23 16:35 Video处理\Capture\Debug\Capture.unsuccessfulbuild
文件 707 2017-11-23 16:33 Video处理\Capture\Debug\Capture.vcxprojResolveAssemblyReference.cache
文件 0 2017-11-23 16:33 Video处理\Capture\Debug\Capture.write.1.tlog
文件 204 2017-11-23 16:33 Video处理\Capture\Debug\Capture_manifest.rc
文件 1514 2017-11-23 16:35 Video处理\Capture\Debug\cl.command.1.tlog
文件 15058 2017-11-23 16:35 Video处理\Capture\Debug\CL.read.1.tlog
文件 894 2017-11-23 16:35 Video处理\Capture\Debug\CL.write.1.tlog
文件 2 2017-11-23 16:35 Video处理\Capture\Debug\li
文件 2 2017-11-23 16:35 Video处理\Capture\Debug\li
文件 2 2017-11-23 16:35 Video处理\Capture\Debug\li
文件 67 2011-06-07 16:51 Video处理\Capture\Debug\mt.dep
文件 552 2017-11-23 16:33 Video处理\Capture\Debug\rc.command.1.tlog
文件 314 2017-11-23 16:33 Video处理\Capture\Debug\rc.read.1.tlog
文件 322 2017-11-23 16:33 Video处理\Capture\Debug\rc.write.1.tlog
文件 11455 2017-11-23 16:33 Video处理\Capture\Debug\stdafx.obj
............此处省略29个文件信息
相关资源
- opencv 求二值化图像的形心
- opencv 学习笔记,个人整理的
- 车牌识别代码arm-Linux,opencv
- OPENCV函数手册(带目录)+OpenCV中文参
- opencv实现行人检测
- VC +opencv识别图像中图形显示于界面
- opencv运动物体检测
- 基于opencv 的图像局部放大
- Opencv静态手势识别
- 双边滤波opencv实现
- 图像的平均亮度
- Opencv绘制物体轮廓,定位主要物件坐
-
OpenCV生成xm
l分类器文件 - Linux下QT及OpenCV搭建
- 张正友相机标定(OpenCV实现)223402
- Adaboost人头部检测 opencv vc
- OpenCv+Ocr 图片文字识别源码
- 于老师的人脸识别VS2015工程
- opencv相机检校
- 车型识别系统vc源码opencv
- opencv依靠颜色识别和跟踪物体
- OpenCV的PCA人脸识别
- openCV+qt视频传输
- OpenCV 现实高斯金字塔的源码,非常经
- opencv运动目标检测与跟踪源代码
- labview与Opencv 人眼识别
- opencv 将两幅等宽图像拼接在一起
- 图像分类代码
- OpenCV 1.0.0 patch for ffmpeg errors
- 车辆分类检测正负样本共计1000张
评论
共有 条评论