#include <SDKDDKVer.h>
#include <stdio.h>
#include <tchar.h>
#include<iostream>
#include<opencv2\opencv.hpp>
#include<opencv2\video\background_segm.hpp>
using namespace cv;
using namespace std;
//对轮廓按面积降序排序,目的是去除那些小轮廓目标
bool descSort(vector<Point> p1, vector<Point> p2) {
return contourArea(p1) > contourArea(p2);
}
int main() {
//读入视频
VideoCapture capture("E:\\临时\\workspace\\1.avi");
//定义一个Mat变量,用于存储每一帧的图像
Mat frame;
//前景
Mat mask;
//连通分量
Mat srcImage;
//结果
Mat result;
//用混合高斯模型训练背景图像
Ptr<BackgroundSubtractorMOG2> bgsubtractor = createBackgroundSubtractorMOG2();
bgsubtractor->setVarThreshold(20);
//for (int k = 0; k < 100; k++)
//{
// //读取当前帧
// capture >> frame;
// //若视频播放完成,退出循环
// if (frame.empty())
// {
// break;
// }
// bgsubtractor->apply(frame, mask, 0.2);
//}
//imshow("前景训练结果", mask);
//循环显示每一帧
while (true)
{
//读取当前帧
capture >> frame;
//若视频播放完成,退出循环
if (frame.empty())
{
break;
}
frame.copyTo(result);
//cvtColor(frame, frame, COLOR_GRAY2BGR);
bgsubtractor->apply(frame, mask, 0.2);
imshow("原视频", frame); //显示当前帧
//waitKey(30); //延时30ms
imshow("混合高斯建模", mask);
//waitKey(30);
//cvtColor(mask, mask, COLOR_GRAY2BGR);
//对前景先进行中值滤波,再进行形态学膨胀操作,以去除伪目标和连接断开的小目标
medianBlur(mask, mask, 5);
//morphologyEx(mask, mask, MORPH_DILATE, getStructuringElement(MORPH_RECT, Size(5, 5)));
//测试:先开运算再闭运算
morphologyEx(mask, mask, MORPH_CLOSE, getStructuringElement(MORPH_RECT, Size(5, 5)));
morphologyEx(mask, mask, MORPH_OPEN, getStructuringElement(MORPH_RECT, Size(5, 5)));
imshow("混合高斯建模", mask);
waitKey(30);
//拷贝
mask.copyTo(srcImage);
//各联通分量的轮廓
//外层vector的size代表了图像中轮廓的个数,里面vector的 size代表了轮廓上点的个数
vector<vector<Point>> contours;
//只获取最外轮廓,获取每个轮廓的每个像素,并相邻两个像素位置差不超过1
findContours(srcImage, contours, RETR_EXTERNAL, CHAIN_APPROX_NONE);
//测试轮廓获取
imshow("轮廓获取", srcImage);
if (contours.size() < 1) continue;
//外接矩阵
Rect rct;
//对轮廓进行外接矩阵之前先对轮廓按面积降序排序,目的为了去除小目标(伪目标)
sort(contours.begin(), contours.end(), descSort);
for (int i = 0; i < contours.size(); i++)
{
//当第i个连通分量的外接矩阵面积小于最大面积的1/6,则认为是伪目标
if (contourArea(contours[i]) < contourArea(contours[0]) / 5)
break;
//包含轮廓的最小矩阵
rct = boundingRect(contours[i]);
rectangle(result, rct, Scalar(0, 255, 0), 2);
}
imshow("结果", result);
}
getchar();
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于OpenCV的车辆检测与跟踪
共33个文件
tlog:18个
lastbuildstate:3个
obj:2个
5星 · 超过95%的资源 需积分: 50 118 下载量 67 浏览量
2017-01-05
21:18:07
上传
评论 14
收藏 1.71MB ZIP 举报
温馨提示
基于OpenCV3.10的车辆检测与跟踪源码和测试视频
资源推荐
资源详情
资源评论
收起资源包目录
CarTracker.zip (33个子文件)
x64
Debug
vc140.idb 595KB
CarTrack.46E678AA.tlog
CarTrackerProject.lastbuildstate 199B
link.read.1.tlog 3KB
link.command.1.tlog 1KB
CL.command.1.tlog 614B
CL.write.1.tlog 484B
CL.read.1.tlog 18KB
link.write.1.tlog 536B
vc140.pdb 1.06MB
main.obj 620KB
test01.log 940B
Release
test01.tlog
link.read.1.tlog 3KB
link.command.1.tlog 1KB
CL.command.1.tlog 634B
CL.write.1.tlog 366B
test01.lastbuildstate 201B
CL.read.1.tlog 18KB
link.write.1.tlog 608B
CarTrack.46E678AA.tlog
CarTrackerProject.lastbuildstate 201B
link.read.1.tlog 2B
link.command.1.tlog 2B
CL.command.1.tlog 634B
CL.write.1.tlog 366B
unsuccessfulbuild 0B
CL.read.1.tlog 18KB
link.write.1.tlog 2B
vc140.pdb 948KB
main.obj 1.58MB
test01.log 1KB
main.cpp 3KB
test01.vcxproj 7KB
1.avi 709KB
Debug
test01.tlog
test01.vcxproj.filters 945B
共 33 条
- 1
资源评论
- weixin_509894662021-04-29终于实现了 膜拜大佬
- 李担心2020-07-31程序的功能确实实现了
- qq_428027762020-04-17这个代码相当靠谱!
行者yxq
- 粉丝: 5
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功