资源简介
早vs2008 中基于opencv2.4.3 的meanshift目标检测,直接运行,视屏从电脑的摄像头读取,演示效果不错,适合初学目标检测的同行,可以从感性上理解meanshift的原理和不足,为改进的camshift理解做准备。原理部分参见我的博客:http://blog.csdn.net/tiandijun,共同学习、交流。

代码片段和文件信息
//#include “StdAfx.h“
#include “opencv2/video/tracking.hpp“
#include “opencv2/imgproc/imgproc.hpp“
#include “opencv2/highgui/highgui.hpp“
#include
#include
using namespace cv;
using namespace std;
Mat image;
bool backprojMode = false; //表示是否要进入反向投影模式,ture表示准备进入反向投影模式
bool selectobject = false;//代表是否在选要跟踪的初始目标,true表示正在用鼠标选择
int trackobject = 0; //代表跟踪目标数目
bool showHist = true;//是否显示直方图
Point origin;//用于保存鼠标选择第一次单击时点的位置
Rect selection;//用于保存鼠标选择的矩形框
int vmin = 10 vmax = 256 smin = 30;
void onMouse( int event int x int y int void* )
{
if( selectobject )//只有当鼠标左键按下去时才有效,然后通过if里面代码就可以确定所选择的矩形区域selection了
{
selection.x = MIN(x origin.x);//矩形左上角顶点坐标
selection.y = MIN(y origin.y);
selection.width = std::abs(x - origin.x);//矩形宽
selection.height = std::abs(y - origin.y);//矩形高
selection &= Rect(0 0 image.cols image.rows);//用于确保所选的矩形区域在图片范围内
}
switch( event )
{
case CV_EVENT_LBUTTONDOWN:
origin = Point(xy);
selection = Rect(xy00);//鼠标刚按下去时初始化了一个矩形区域
selectobject = true;
break;
case CV_EVENT_LBUTTONUP:
selectobject = false;
if( selection.width > 0 && selection.height > 0 )
trackobject = -1;
break;
}
}
void help()
{
cout << “\nThis is a demo that shows mean-shift based tracking\n“
“You select a color objects such as your face and it tracks it.\n“
“This reads from video camera (0 by default or the camera number the user enters\n“
“Usage: \n“
“ ./camshiftdemo [camera number]\n“;
cout << “\n\nHot keys: \n“
“\tESC - quit the program\n“
“\tc - stop the tracking\n“
“\tb - switch to/from backprojection view\n“
“\th - show/hide object histogram\n“
“\tp - pause video\n“
“To initialize tracking select the object with mouse\n“;
}
const char* keys =
{
“{1| | 0 | camera number}“
};
int main( int argc const char** argv )
{
help();
VideoCapture cap; //定义一个摄像头捕捉的类对象
Rect trackWindow;
RotatedRect trackBox;//定义一个旋转的矩阵类对象
int hsize = 16;
float hranges[] = {0180};//hranges在后面的计算直方图函数中要用到
const float* phranges = hranges;
CommandLineParser parser(argc argv keys);//命令解析器函数
int camNum = parser.get(“1“);
cap.open(camNum);//直接调用成员函数打开摄像头
if( !cap.isOpened() )
{
help();
cout << “***Could not initialize capturing...***\n“;
cout << “Current parameter‘s value: \n“;
parser.printParams();
return -1;
}
namedWindow( “Histogram“ 0 );
namedWindow( “CamShift Demo“ 0 );
setMouseCallback( “CamShift Demo“ onMouse 0 );//消息响应机制
createTrackbar( “Vmin“ “CamShift Demo“ &vmin 256 0 );//createTrackbar函数的功能是在对应的窗口创建滑动条,滑动条Vminvmin表示滑动条的值,最大为256
createTrackbar( “Vmax“ “CamShift Demo“ &vmax
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 10038 2014-06-18 10:43 2014-06-18 MeanShift\2014-06-18 MeanShift\2014-06-18 MeanShift.cpp
文件 4785 2014-06-18 10:43 2014-06-18 MeanShift\2014-06-18 MeanShift\2014-06-18 MeanShift.vcproj
文件 1425 2014-06-18 21:07 2014-06-18 MeanShift\2014-06-18 MeanShift\2014-06-18 MeanShift.vcproj.PC201310041721.Administrator.user
文件 663 2014-06-18 10:44 2014-06-18 MeanShift\2014-06-18 MeanShift\Debug\2014-06-18 MeanShift.exe.em
文件 728 2014-06-18 10:44 2014-06-18 MeanShift\2014-06-18 MeanShift\Debug\2014-06-18 MeanShift.exe.em
文件 621 2014-06-18 10:44 2014-06-18 MeanShift\2014-06-18 MeanShift\Debug\2014-06-18 MeanShift.exe.intermediate.manifest
文件 363539 2014-06-18 10:43 2014-06-18 MeanShift\2014-06-18 MeanShift\Debug\2014-06-18 MeanShift.obj
文件 14644 2014-06-18 10:44 2014-06-18 MeanShift\2014-06-18 MeanShift\Debug\BuildLog.htm
文件 65 2014-06-18 10:44 2014-06-18 MeanShift\2014-06-18 MeanShift\Debug\mt.dep
文件 289792 2014-06-18 10:43 2014-06-18 MeanShift\2014-06-18 MeanShift\Debug\vc90.idb
文件 520192 2014-06-18 10:43 2014-06-18 MeanShift\2014-06-18 MeanShift\Debug\vc90.pdb
文件 3517440 2014-06-18 21:07 2014-06-18 MeanShift\2014-06-18 MeanShift.ncb
文件 926 2014-06-18 10:42 2014-06-18 MeanShift\2014-06-18 MeanShift.sln
..A..H. 8704 2014-06-18 21:07 2014-06-18 MeanShift\2014-06-18 MeanShift.suo
文件 97280 2014-06-18 10:44 2014-06-18 MeanShift\Debug\2014-06-18 MeanShift.exe
文件 638544 2014-06-18 10:44 2014-06-18 MeanShift\Debug\2014-06-18 MeanShift.ilk
文件 1207296 2014-06-18 10:44 2014-06-18 MeanShift\Debug\2014-06-18 MeanShift.pdb
目录 0 2014-06-18 10:44 2014-06-18 MeanShift\2014-06-18 MeanShift\Debug
目录 0 2014-06-18 10:43 2014-06-18 MeanShift\2014-06-18 MeanShift
目录 0 2014-06-18 10:44 2014-06-18 MeanShift\Debug
目录 0 2014-06-18 10:43 2014-06-18 MeanShift
----------- --------- ---------- ----- ----
6676682 21
- 上一篇:3D排3胆码王.rar
- 下一篇:bootstrap 4.1.3-dist.zip
相关资源
- 背景差分法 多目标跟踪
- 基于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的分水岭算法实现
- 基于meanshift和粒子滤波的目标跟踪代
- QT+opencv+OCR 身份证号码,银行卡号识别
- opencv视频特定颜色区域识别
- 把RGB转换为HSV和HSI然后根据黄色和蓝
- opencv视觉测距
- 基于Qt和opencv的身份证号码识别系统
- opencv_ffmpeg249.dll
- SfM稀疏三维点云重建--完整工程文件
- 基于opencv的数人头程序源代码
- 自拍用于目标跟踪的红外图像序列
- 画跟踪精确度图的程序.zip
- 利用OpenCV中的Stitcher类实现全景图像拼
- opencv实现的sift算法源码,包含了图像
- openCV 上的小波变换
- 基于OPENCV的车牌识别系统设计
评论
共有 条评论