资源简介
实现了静态背景下多目标的跟踪,并进行了可视化的跟踪效果,用矩形框框起了运动目标,并赋予了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的数字识别468815
- 使用opencv去掉二值化图像中黑色面积
- opencv环境配置
- win10 64位下编译的opencv4.5.5库,opencv
- 多目标跟踪MOT16_Benchmark数据集链接
- NVIDIAOpticalFlowSDK-79c6cee80a2df9a196f20afd6
- opencv_contrib-3.4.0.zip
- opencv2.4.9源码分析——SIFT
- 用两个摄像头实现,双目标定,双目
- opencv_traincascade训练分类器,手势识别
- opencv3.0交叉编译用parallel.cpp
- 基于opencv的图像识别识别图像中的色
- 基于openCV的识别特定颜色区域
- 基于OpenCV的分水岭算法实现
- QT+opencv+OCR 身份证号码,银行卡号识别
- opencv视频特定颜色区域识别
- 把RGB转换为HSV和HSI然后根据黄色和蓝
- opencv视觉测距
- 基于Qt和opencv的身份证号码识别系统
- opencv_ffmpeg249.dll
- SfM稀疏三维点云重建--完整工程文件
- 基于opencv的数人头程序源代码
- 利用OpenCV中的Stitcher类实现全景图像拼
- opencv实现的sift算法源码,包含了图像
- openCV 上的小波变换
- 基于OPENCV的车牌识别系统设计
- 617张国内车牌60-17bmp图片用于OpenCV正样
- hog特征提取,c版本代码
- 基于Qt5.8+OpenCV3.2的Basler多相机触发开
评论
共有 条评论