void CTrafficsampleDlg::OnOK() //读入视频并检测车辆
{
// TODO: Add extra validation here
//此处添加图像处理的代码
//CDialog::OnOK();
IplImage *frame = NULL; //定义帧,每帧就是一张图
IplImage *B_part = NULL, *G_part = NULL, *R_part = NULL;
IplImage *pFrImg = NULL; //前景图片
IplImage *pBkImg = NULL; //背景图片
IplImage *dst = NULL;
CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* contour = 0;
//轮廓矩形
CvRect contourRect = cvRect(0,0,0,0);
//可以获取视频的各种属性
CvCapture * pCapture = cvCreateFileCapture("traffic.avi");
cvNamedWindow("Camera",CV_WINDOW_AUTOSIZE); //设置窗口
cvNamedWindow("temp", CV_WINDOW_AUTOSIZE);
cvNamedWindow("background",1);
cvNamedWindow("foreground",1);
cvNamedWindow("contours",1);
cvMoveWindow("background", 360, 0);
cvMoveWindow("foreground", 690, 0);
//初始化高斯混合模型参数
CvGaussBGModel *bg_model=NULL;
int count = 1;
while (frame = cvQueryFrame(pCapture))
{
if(count ==1)
{
B_part = cvCreateImage(cvGetSize(frame),frame->depth,1);
G_part = cvCreateImage(cvGetSize(frame),frame->depth,1);
R_part = cvCreateImage(cvGetSize(frame),frame->depth,1);
pBkImg = cvCreateImage(cvSize(frame->width, frame->height), IPL_DEPTH_8U,3);
pFrImg = cvCreateImage(cvSize(frame->width, frame->height), IPL_DEPTH_8U,1);
dst = cvCreateImage( cvGetSize(frame), 8, 3 );//找到轮廓并绘制轮廓
bg_model = (CvGaussBGModel*)cvCreateGaussianBGModel(frame, 0);
}
else
{
cvUpdateBGStatModel(frame, (CvBGStatModel *)bg_model );//更新高斯背景模型
//pFrImg为前景图像,只能为单通道
//pBkImg为背景图像,可以为单通道或与pFrame通道数相同
cvCopy(bg_model->foreground,pFrImg,0);
cvCopy(bg_model->background,pBkImg,0);
//把图像正过来
pBkImg->origin=1;
pFrImg->origin=1;
cvSplit(frame , B_part,G_part, R_part,0);
cvFlip(B_part,B_part,0);//沿X轴翻转一次
//下面进行阈值分割
//如何确定阈值??是否存在编好的函数呢?
//固定阈值分割方式,会导致一张图片中如果亮暗不均,一张图的不同区域分割效果差距很大
//如果能够提前提取出图像的背景,然后想减的方式会使分割效果变好
cvThreshold(B_part,B_part, 195, 255,CV_THRESH_BINARY);
//阈值分割之后,进行膨胀操作和腐蚀操作
//默认的模板由于腐蚀和膨胀的幅度比较大,效果不是很好啊
//最好是自定义模板
//观察白线大多为竖直的,腐蚀时主要是横向腐蚀
//车体车头和车身由于在前玻璃的分割作用,数要是在竖向,膨胀时主要在竖向,但是需避免造成两车的太近而融为一体
IplConvKernel * kenel = cvCreateStructuringElementEx(3,1,1,0,CV_SHAPE_RECT,NULL);
IplConvKernel * kenel2 = cvCreateStructuringElementEx(1,3,0,1,CV_SHAPE_RECT,NULL);
cvErode(B_part, B_part,kenel,1 );
cvDilate(B_part,B_part,kenel,1);
cvErode(B_part, B_part,kenel2, 1);
vErode(B_part, B_part,kenel,1 );
cvDilate(B_part,B_part,kenel2,2);
cvDilate(B_part,B_part,kenel2,2);
cvDilate(B_part,B_part,NULL,1);
//获取并绘制轮廓
cvFindContours( B_part, storage, &contour, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE );
cvZero( dst );
for( ; contour != 0; contour = contour->h_next )
{
contourRect = cvBoundingRect(contour,0);
if((contourRect.width > 10) &&(contourRect.height >12)){
CvScalar color = CV_RGB( rand()&255, rand()&255, rand()&255 );//每次都随机颜色显示
/* 用1替代 CV_FILLED 所指示的轮廓外形 */
cvDrawContours( dst, contour, color, color, -1, CV_FILLED, 8 );
//cvRectangle(pFrame,pt3,pt4,CV_RGB(255,0,0),1, 8, 0 );
cvRectangle(dst ,cvPoint(contourRect.x, contourRect.y),
cvPoint(contourRect.x + contourRect.width, contourRect.y + contourRect.height),
CV_RGB(255,0,0),
1,
8,
0);
}
}
cvShowImage("Camera", frame);
cvShowImage("temp" ,B_part);
cvShowImage("background", pBkImg);
cvShowImage("foreground", pFrImg);
cvShowImage( "contours", dst );
int key1;
key1 = cvWaitKey (300);
if (key1 == 'q' || key1 == 'Q')
break;
}
count++;
}
cvDestroyWindow("temp");
cvReleaseCapture(&pCapture); //销毁摄像头
cvDestroyWindow("Camera"); //销毁窗口
cvReleaseBGStatModel((CvBGStatModel**)&bg_model);
cvDestroyWindow("background");
cvDestroyWindow("foreground");
cvReleaseImage(&pFrImg);
cvReleaseImage(&pBkImg);
cvReleaseImage(&dst);
cvDestroyWindow("contours");
//CTrafficsampleDlg::OnOK();
}
分享到:
相关推荐
图像检测图像检测图像检测图像检测图像检测图像检测图像检测图像检测图像检测图像检测 图像检测图像检测图像检测图像检测图像检测图像检测图像检测图像检测图像检测图像检测 图像检测图像检测图像检测图像检测图像...
实现了一个简单的车辆速度估计和车流量统计的GUI应用,它使用了Haar级联检测器和相关跟踪器来检测和跟踪视频中的车辆,并通过图像处理和数学计算来估计车辆的速度。 包含功能函数如下: 1.导入必要的库和模块,包括...
斑马线检测通过opencv图像处理来进行灰度值转换、高斯滤波去噪、阈值处理、腐蚀和膨胀后对图像进行轮廓检测,通过判断车辆和行人的位置,以及他们之间的距离信息,当车速到超过一定阈值时并且与行人距离较近时,则会...
python opencv车辆测速视频汽车速度检测入侵检测测速,基于计算机视觉技术的入侵检测通过设计图像处理方法实现对某一动态场景的实时观测,并在场景存在外来入侵情况时向上层管理系统发送入侵检测结果,效果展示:...
2-5 Eclipse设定OpenCV开发环境 46 2-6 整合Java之Eclipse与OpenCV 49 2-7 开发第一个OpenCV程式 51 2-8 建立矩阵 52 范例2-8-1 建立第一个opencv的矩阵,使用阵列 53 范例2-8-2 建立opencv的Mat矩阵方法2 55 范例2-8...
OpenCV(Open Source Computer Vision Library)是一个广泛应用于计算机视觉和图像处理领域的开源库。它提供了丰富的功能和算法,用于处理图像、视频、深度图像等视觉数据。 以下是一些关于OpenCV的常见知识描述: ...
车道和车辆检测系统OpenCV图像处理管道,用于自动驾驶汽车的车道和车辆检测图像处理管道添加自动调整(自动亮度和对比度)以消除颜色不规则转换为灰度并隔离黄色和白色运行Canny边缘检测器创建感兴趣的区域以减少...
一篇关于道路车辆检测与跟踪的优秀论文,可作为学习图像处理的入门资料。
为了获得理想的车辆轮廓线,提出了一种基于开源计算机视觉库OpenCV的轮廓检测新方法。首先对图像进行形态学去噪、平滑滤波处理和二值化阈值分割等预处理,获得二值化黑白图像。然后通过轮廓提取和跟踪检测到车辆外轮廓...
11_人脸检测与识别系统,10_指纹提取与识别系统,12_运动车辆检测跟踪系统.
这个项目旨在利用Qt和OpenCV...OpenCV:用于图像处理、车辆检测和跟踪。 C++:主要编程语言,用于开发应用程序。 可用于毕业设计, 此项目为可执行文件, 如购买可联系博主获取源代码。可远程配置环境!!!(付费)
然后通过轮廓提取和跟踪检测到车辆外轮廓线在Python环境下,利用 OpenCV编程实现了此方法。 通过提取全景图,在图像场景中由于目标和背景的温差较小,从而导致图像的对比度很低,为了提高图像的对比度,增强图像。...
医疗影像分析:在医疗领域,OpenCV可用于医学图像处理、病灶检测、诊断辅助等应用。 自动驾驶:在车辆视觉感知系统中,OpenCV用于道路标志识别、障碍物检测、车道线识别等任务。 多媒体应用:如图像编辑软件、...
车牌识别是⼀种图像处理技术,⽤于识别不同车辆。这项技术被⼴泛⽤于各种安全检测中。现在让我⼀起基于OpenCV编写Python代码来 完成这⼀任务。 车牌识别的相关步骤 1.车牌检测:第⼀步是从汽车上检测车牌所在位置。...
介绍了车牌识别的处理过程,用到的原理以及主要部分代码实现
丰富的功能:库中包含了数千个优化过的函数,涵盖了计算机视觉领域的诸多方面,如图像处理(滤波、形态学操作、色彩空间转换等)、特征检测与描述(如SIFT、SURF、ORB等)、物体识别与检测(如Haar级联分类器、HOG...
车辆检测是智能交通监控系统的关键环节,车辆视频检测的基本原理是通过对从摄像机采集的视频序列通过数字图像处理技术,提取图像中的车辆信息,从而达到检测和判断车辆是否违章的目的
通过读取摄像头,获得图片进行图像处理,动态物体检测,通过经过的基准线的变化的像素数。检测通过路口的汽车数量。本人已经添加车辆计数功能。并亲测功能。OPENCV和C++的应用。需要自行调整摄像头。根据路口的位置...
医疗影像分析:在医疗领域,OpenCV可用于医学图像处理、病灶检测、诊断辅助等应用。 自动驾驶:在车辆视觉感知系统中,OpenCV用于道路标志识别、障碍物检测、车道线识别等任务。 多媒体应用:如图像编辑软件、...
医疗影像分析:在医疗领域,OpenCV可用于医学图像处理、病灶检测、诊断辅助等应用。 自动驾驶:在车辆视觉感知系统中,OpenCV用于道路标志识别、障碍物检测、车道线识别等任务。 多媒体应用:如图像编辑软件、...