基于OpenCV的车辆监测与计数


基于OpenCV2.4.9的视频车辆识别与车辆计数,在Visual Studio 2010上开发。多多指教。
资源截图
代码片段和文件信息
#include “opencv2/opencv.hpp“
#include
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> contours;  
vector hierarcy;
findContours(diff contours hierarcy CV_RETR_EXTERNAL CHAIN_APPROX_NONE); //查找轮廓
vector> contours_poly(contours.size());
vector 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 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(0140) Point(568140) Scalar(00255) 1 8);
Point org(035);

sprintf(Num “CarNum=%d“ CarNum);
putText(result Num org CV_FONT_HERSHEY_SIMPLEX 0.8f CV_RGB(02550) 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);
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-04-10 11:20  vehicle detection
     目录           0  2018-04-10 11:19  vehicle detectionDebug
     文件      115200  2018-04-09 11:02  vehicle detectionDebugvisual1111.exe
     文件     1202084  2018-04-09 11:02  vehicle detectionDebugvisual1111.ilk
     文件     2026496  2018-04-09 11:02  vehicle detectionDebugvisual1111.pdb
     目录           0  2018-04-10 11:19  vehicle detectionipch
     目录           0  2018-04-10 11:19  vehicle detectionipchvisual1111-27eaa1c8
     文件    56688640  2018-04-09 16:23  vehicle detectionipchvisual1111-27eaa1c8visual1111-43b96364.ipch
     目录           0  2018-04-10 11:19  vehicle detectionvisual1111
     目录           0  2018-04-10 11:19  vehicle detectionvisual1111Debug
     文件       37488  2018-04-09 11:02  vehicle detectionvisual1111DebugCL.read.1.tlog
     文件        1126  2018-04-09 11:02  vehicle detectionvisual1111DebugCL.write.1.tlog
     文件      336347  2018-04-07 11:18  vehicle detectionvisual1111Debugike.obj
     文件      523093  2018-04-09 11:02  vehicle detectionvisual1111Debugcar.obj
     文件        2026  2018-04-09 11:02  vehicle detectionvisual1111Debugcl.command.1.tlog
     文件           2  2018-04-09 11:02  vehicle detectionvisual1111Debuglink-cvtres.read.1.tlog
     文件           2  2018-04-09 11:02  vehicle detectionvisual1111Debuglink-cvtres.write.1.tlog
     文件           2  2018-04-09 11:02  vehicle detectionvisual1111Debuglink.24940-cvtres.read.1.tlog
     文件           2  2018-04-09 11:02  vehicle detectionvisual1111Debuglink.24940-cvtres.write.1.tlog
     文件           2  2018-04-09 11:02  vehicle detectionvisual1111Debuglink.24940.read.1.tlog
     文件           2  2018-04-09 11:02  vehicle detectionvisual1111Debuglink.24940.write.1.tlog
     文件           2  2018-04-09 11:02  vehicle detectionvisual1111Debuglink.37112-cvtres.read.1.tlog
     文件           2  2018-04-09 11:02  vehicle detectionvisual1111Debuglink.37112-cvtres.write.1.tlog
     文件           2  2018-04-09 11:02  vehicle detectionvisual1111Debuglink.37112.read.1.tlog
     文件           2  2018-04-09 11:02  vehicle detectionvisual1111Debuglink.37112.write.1.tlog
     文件        2396  2018-04-09 11:02  vehicle detectionvisual1111Debuglink.command.1.tlog
     文件        5312  2018-04-09 11:02  vehicle detectionvisual1111Debuglink.read.1.tlog
     文件         844  2018-04-09 11:02  vehicle detectionvisual1111Debuglink.write.1.tlog
     文件      522537  2018-04-07 11:16  vehicle detectionvisual1111Debugmain.obj
     文件         416  2018-04-09 11:02  vehicle detectionvisual1111Debugmt.command.1.tlog
     文件         358  2018-04-09 11:02  vehicle detectionvisual1111Debugmt.read.1.tlog
............此处省略22个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)