#include "opencv2/opencv.hpp"
#include<iostream>
using namespace std;
using namespace cv;
int CarNum = 0;//初始化车的数量为0
Mat MoveDetect(Mat frame1, Mat frame2){//移动监测
Mat result = frame2.clone();//克隆frame2
Mat gray1, gray2;
cvtColor(frame1, gray1, CV_BGR2GRAY);//颜色空间转换,将frame1图像转换为灰度图
cvtColor(frame2, gray2, CV_BGR2GRAY);//颜色空间转换,将frame2图像转换为灰度图
Mat diff;
absdiff(gray1, gray2, diff);//帧差法,计算两个数组差的绝对值的函数。
imshow("帧差法显示", diff);
//threshold(diff, diff, 45, 255, CV_THRESH_BINARY); //简单二值化
adaptiveThreshold(diff, diff, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY_INV, 15, 3);//自适应阈值化
imshow("二值化显示", diff);
//图像的二值化就是将图像上的像素点的灰度值设置为0或255,
//这样将使整个图像呈现出明显的黑白效果。在数字图像处理中,
//二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,
//从而能凸显出目标的轮廓。OpenCV中提供了函数cv::threshold();
Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));//返回矩形的结构元素,核大小为3*3
Mat element2 = getStructuringElement(MORPH_RECT, Size(31, 31));//返回矩形的结构元素,核大小为31*31
//进行形态学操作
morphologyEx(diff, diff, MORPH_OPEN, element);//输入为diff,输出为diff,开运算的形态学操作
medianBlur(diff, diff, 9);//中值滤波
dilate(diff, diff, element2);//膨胀操作
imshow("膨胀窗口", diff);//图像膨胀
vector<vector<Point>> contours;
vector<Vec4i> hierarcy;
findContours(diff, contours, hierarcy, CV_RETR_EXTERNAL, CHAIN_APPROX_NONE); //查找轮廓
vector<vector<Point>> contours_poly(contours.size());
vector<Rect> boundRect(contours.size()); //定义外接矩形集合
//drawContours(img2, contours, -1, Scalar(0, 0, 255), 1, 8); //绘制轮廓
int x0=0, y0=0, w0=0, h0=0;
char Num[10];
for(int i=0; i<contours.size(); i++){
approxPolyDP(Mat(contours[i]), contours_poly[i], 3, true); //多边形逼近
boundRect[i] = boundingRect((Mat)contours_poly[i]); //查找每个轮廓的外接矩形
if(boundRect[i].width > 55 && boundRect[i].width <180 && boundRect[i].height > 55 && boundRect[i].height < 180){
x0 = boundRect[i].x; //获得第i个外接矩形的左上角的x坐标
y0 = boundRect[i].y; //获得第i个外接矩形的左上角的y坐标
w0 = boundRect[i].width; //获得第i个外接矩形的宽度
h0 = boundRect[i].height; //获得第i个外接矩形的高度
rectangle(result, Point(x0, y0), Point(x0+w0, y0+h0), Scalar(0, 255, 0), 2, 8); //绘制第i个外接矩形
}
if((y0 + h0/2 + 1) >= 138 && (y0 + h0/2 - 1) <= 142){
CarNum++;
}
line(result, Point(0,140), Point(568,140), Scalar(0,0,255), 1, 8);
Point org(0,35);
sprintf(Num, "CarNum=%d", CarNum);
putText(result, Num, org, CV_FONT_HERSHEY_SIMPLEX, 0.8f, CV_RGB(0,255,0), 2);
}
return result;
}
void main(){
VideoCapture cap("car.avi");//打开一个视频文件
if(!cap.isOpened()) //检查打开是否成功
return;
Mat frame;
Mat result;
Mat temp;
int count=0;
while(1){
cap>>frame;
if(!frame.empty()){//frame不为空
count++;
if(count==1)
result = MoveDetect(frame, frame);
else
result = MoveDetect(temp, frame);
imshow("原图", frame);//原图
imshow("结果", result);//结果图
temp = frame.clone();
if(waitKey(5)==27)//判断用户的操作,若用户在5ms时间段中按下ESC则跳出循环
break;
}
else
break;
}
cap.release();
waitKey(0);
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于OpenCV的车辆监测与计数
共47个文件
tlog:23个
obj:3个
manifest:2个
5星 · 超过95%的资源 需积分: 35 179 下载量 81 浏览量
2018-04-10
11:23:55
上传
评论 25
收藏 17.09MB ZIP 举报
温馨提示
基于OpenCV2.4.9的视频车辆识别与车辆计数,在Visual Studio 2010上开发。多多指教。
资源推荐
资源详情
资源评论
收起资源包目录
vehicle detection.zip (47个子文件)
vehicle detection
ipch
visual1111-27eaa1c8
visual1111-43b96364.ipch 54.06MB
visual1111.sln 897B
Debug
visual1111.pdb 1.93MB
visual1111.ilk 1.15MB
visual1111.exe 113KB
visual1111.sdf 13.02MB
visual1111.suo 13KB
visual1111
car.cpp 3KB
visual1111.vcxproj.filters 941B
Debug
CL.write.1.tlog 1KB
visual1111.write.1.tlog 0B
vc100.idb 619KB
mt.read.1.tlog 358B
link.37112.write.1.tlog 2B
link.37112-cvtres.write.1.tlog 2B
visual1111_manifest.rc 210B
link-cvtres.write.1.tlog 2B
rc.command.1.tlog 586B
link.37112.read.1.tlog 2B
link.command.1.tlog 2KB
vc100.pdb 1012KB
CL.read.1.tlog 37KB
mt.write.1.tlog 358B
link-cvtres.read.1.tlog 2B
rc.read.1.tlog 330B
car.obj 511KB
link.24940-cvtres.read.1.tlog 2B
visual1111.vcxprojResolveAssemblyReference.cache 713B
bike.obj 328KB
link.24940.read.1.tlog 2B
mt.command.1.tlog 416B
visual1111.lastbuildstate 64B
link.write.1.tlog 844B
visual1111.exe.intermediate.manifest 381B
link.24940.write.1.tlog 2B
visual1111.exe.embed.manifest 406B
cl.command.1.tlog 2KB
link.37112-cvtres.read.1.tlog 2B
main.obj 510KB
visual1111.log 3KB
rc.write.1.tlog 338B
link.24940-cvtres.write.1.tlog 2B
link.read.1.tlog 5KB
visual1111.exe.embed.manifest.res 472B
visual1111.vcxproj.user 143B
visual1111.vcxproj 4KB
car.avi 1.87MB
共 47 条
- 1
Demo.demo
- 粉丝: 410
- 资源: 27
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页