【OpenCV】 车辆识别 运动目标检测

这篇具有很好参考价值的文章主要介绍了【OpenCV】 车辆识别 运动目标检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一:车辆识别 运动目标检测

二:车辆识别实现 超详细步骤解析

步骤一:灰度化处理

步骤二:帧差处理

步骤三:二值化处理

步骤四:图像降噪

4-1 腐蚀处理 目的 去除白色噪点

4-2 膨胀处理 目的 把白色区域变大

步骤五:提取关键点 框选运动目标检测

三:车辆识别 完整源码分享


一:车辆识别 运动目标检测

【OpenCV】 车辆识别 运动目标检测

二:车辆识别实现 超详细步骤解析

步骤一:灰度化处理

灰度处理目的 RGB三通道转灰度单通道 压缩到原图片三分之一大小

效果展示:【避免内存浪费 帧差法对前后帧图像灰度化处理】 cvtColor

【OpenCV】 车辆识别 运动目标检测

//1 灰度处理 目的 RGB三通道转灰度单通道 压缩到原图片三分之一大小
    cvtColor(frontFrame,frontGray,CV_RGB2GRAY);//前一帧灰度化处理
    cvtColor(afterFrame,afterGray,CV_RGB2GRAY);//后一帧灰度化处理
    //imshow("frontGray",frontGray);//测试
    //imshow("afterGray",afterGray);//测试

步骤二:帧差处理

帧差处理目的 找到帧与帧之间的差异(找出正在运动的物体)

效果展示:【运动目标的检测:运动事物显示灰度,静止事物显示黑度】 absdiff

【OpenCV】 车辆识别 运动目标检测

 //2 帧差处理 目的 找到帧与帧之间的差异(正在运动的物体)
    Mat diff;
    Mat frontGray,afterGray;
    absdiff(frontGray,afterGray,diff);//前后帧对比存于diff中
    imshow("diff",diff);//测试

步骤三:二值化处理

二值化处理 目的 将灰度图继续识别转换为黑白分明的图像    threshold

效果展示:【步骤二中运动事物显示灰度,静止事物显示黑度,在这里进行二值化处理,能够黑白分明,便于计算机识别运动目标,如下右图二值化处理后黑白分明】【缺点:存在白色噪点,如下右图除了车辆外后面的背景也显示白度,这就是白色噪点,需要去除】

【OpenCV】 车辆识别 运动目标检测

    //3 二值化处理 目的 将灰度图继续识别转换为黑白分明的图像
    threshold(diff,diff,25,255,CV_THRESH_BINARY);
    imshow("threshold",diff);//测试

步骤四:图像降噪

4-1 腐蚀处理 目的 去除白色噪点

效果展示:【步骤三中存在的白色噪点能够去除,但是在去除白色噪点的同时,也影响了车辆的白度显示,如下右图可以看出,车辆白度显示有所降低,因此还是需要改进】erode

【OpenCV】 车辆识别 运动目标检测

    //4 图像降噪
    //4-1 腐蚀处理 目的 去除白色噪点
    Mat element = cv::getStructuringElement(MORPH_RECT,Size(3,3));//小于3*3方块的白色噪点都会被腐蚀
    erode(diff,diff,element);
    imshow("erode",diff);//测试

4-2 膨胀处理 目的 把白色区域变大

效果展示:【如下右图,膨胀处理将车辆形状大致显示,便于框选车辆识别操作dilate

【OpenCV】 车辆识别 运动目标检测

    //4-2 膨胀 目的 把白色区域变大
    Mat element2=cv::getStructuringElement(MORPH_RECT,Size(20,20));
    dilate(diff,diff,element2);
    imshow("dilate",diff);//测试

步骤五:提取关键点 框选运动目标检测

效果展示:车辆识别 运行目标检测 框选识别行进的车辆   

【OpenCV】 车辆识别 运动目标检测

    //5 提取关键点
    //5-1 查找特征点
    vector<vector<Point>>contours;
    findContours(diff,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE,Point(0,0));

    //5-2 提取关键点
    vector<vector<Point>>contours_poly(contours.size());
    vector<Rect>boundRect(contours.size());

    //5-3 确定下四个点来用于框选目标物体
    int x,y,w,h;
    int num=contours.size();
    for(int i = 0;i < num;i++)
    {
        approxPolyDP(Mat(contours[i]),contours_poly[i],3,true);
        //多边拟合
        boundRect[i]=boundingRect(Mat(contours_poly[i]));
        x=boundRect[i].x;
        y=boundRect[i].y;
        w=boundRect[i].width;
        h=boundRect[i].height;
        //绘制矩形
        rectangle(resFrame,Point(x,y),Point(x+w,y+h),Scalar(0,0,255),2);
    }

三:车辆识别 完整源码分享

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

Mat moveCheck(Mat &frontFrame,Mat &afterFrame)
{
    Mat resFrame,diff;
    Mat frontGray,afterGray;

    //克隆当前帧画面 返回最终结果
    resFrame = afterFrame.clone();

    //1 灰度处理 目的 RGB三通道转灰度单通道 压缩到原图片三分之一大小
    cvtColor(frontFrame,frontGray,CV_RGB2GRAY);
    cvtColor(afterFrame,afterGray,CV_RGB2GRAY);

    //imshow("frontGray",frontGray);
    //imshow("afterGray",afterGray);

    //2 帧差处理 目的 找到帧与帧之间的差异(正在运动的物体)
    absdiff(frontGray,afterGray,diff);
    //imshow("diff",diff);

    //3 二值化处理 目的 将灰度图继续识别转换为黑白分明的图像
    threshold(diff,diff,25,255,CV_THRESH_BINARY);
    //imshow("threshold",diff);

    //4 图像降噪
    //4-1 腐蚀处理 目的 去除白色噪点
    Mat element = cv::getStructuringElement(MORPH_RECT,Size(3,3));//小于3*3方块的白色噪点都会被腐蚀
    erode(diff,diff,element);
    //imshow("erode",diff);

    //4-2 膨胀 目的 把白色区域变大
    Mat element2=cv::getStructuringElement(MORPH_RECT,Size(20,20));
    dilate(diff,diff,element2);
    //imshow("dilate",diff);

    //5 提取关键点
    //5-1 查找特征点
    vector<vector<Point>>contours;
    findContours(diff,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE,Point(0,0));

    //5-2 提取关键点
    vector<vector<Point>>contours_poly(contours.size());
    vector<Rect>boundRect(contours.size());

    //5-3 确定下四个点来用于框选目标物体
    int x,y,w,h;
    int num=contours.size();
    for(int i = 0;i < num;i++)
    {
        approxPolyDP(Mat(contours[i]),contours_poly[i],3,true);
        //多边拟合
        boundRect[i]=boundingRect(Mat(contours_poly[i]));
        x=boundRect[i].x;
        y=boundRect[i].y;
        w=boundRect[i].width;
        h=boundRect[i].height;
        //绘制矩形
        rectangle(resFrame,Point(x,y),Point(x+w,y+h),Scalar(0,0,255),2);
    }

    return resFrame;
}

int main(int argc, char *argv[])
{
    Mat frame;
    Mat temp;
    Mat res;
    int count = 0;

    VideoCapture cap("D:/00000000000003jieduanshipincailliao/carMove.mp4");//视频路径

    while (cap.read(frame))
    {
        count++;
        if(count == 1)
        {
            res = moveCheck(frame,frame);
        }
        else
        {
            res = moveCheck(temp,frame);
        }
        imshow("frame",frame);
        imshow("res",res);//最终车辆识别成果
        temp = frame.clone();
        waitKey(15);
    }
    return 0;
}

对于夜晚的行进的车辆也能够正常识别

【OpenCV】 车辆识别 运动目标检测

不过,本次帧差法的车辆识别存在弊端,只要是运动的物体都会识别,比如,博主打开摄像头,动一动手指头,也会被框选识别,因此是有一定弊端的

【OpenCV】 车辆识别 运动目标检测

但是,帧差法的运动目标检测,在夜晚监控中是非常广泛地应用到,因为有任何的风吹草动,都会被框选识别,可以用于安防管理文章来源地址https://www.toymoban.com/news/detail-443897.html

到了这里,关于【OpenCV】 车辆识别 运动目标检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv运动目标检测-背景建模

    背景建模 帧差法 由于场景中的目标在运动,目标的影像在不同图像帧中的位置不同。该类算法对时间上连续的两帧图像进行差分运算,不同帧对应的像素点相减,判断灰度差的绝对值,当绝对值超过一定阈值时,即可判断为运动目标,从而实现目标的检测功能。 帧差法非常

    2024年02月12日
    浏览(31)
  • 【OpenCV】“帧差法”实现移动物体的检测(车辆识别)

    目录 一、帧差法 1、概念 2、为什么帧差法可以检测运动的物体?  二、使用OpenCV配合帧差法实现车辆识别 1、加载视频 2、灰度处理+帧差计算 3、二值化 4、腐蚀 5、膨胀 6、框选出车辆 三、全部代码+实现效果 1、代码 2、车辆检测效果 四、帧差法存在不足之处         帧差

    2024年02月02日
    浏览(34)
  • 计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)

    该项目一个基于深度学习和目标跟踪算法的项目,主要用于实现视频中的目标检测和跟踪。 该项目使用了 YOLOv5目标检测算法和 DeepSORT 目标跟踪算法,以及一些辅助工具和库,可以帮助用户快速地在本地或者云端上实现视频目标检测和跟踪! 教程博客_传送门链接-------单目测

    2024年02月08日
    浏览(42)
  • 竞赛 深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv

    🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习得交通车辆流量分析 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:5分 🧿 更多资料, 项目分享: https://gitee.com/da

    2024年02月07日
    浏览(39)
  • 竞赛选题 深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv

    🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习得交通车辆流量分析 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:5分 🧿 更多资料, 项目分享: https://gitee.com/da

    2024年02月06日
    浏览(43)
  • python毕业设计 深度学习交通车辆目标检测与跟踪系统 - opencv

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月05日
    浏览(34)
  • 竞赛选题 深度学习YOLOv5车辆颜色识别检测 - python opencv

    🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习YOLOv5车辆颜色识别检测 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com

    2024年02月07日
    浏览(36)
  • 【毕业设计】深度学习YOLOv5车辆颜色识别检测 - python opencv

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月16日
    浏览(36)
  • 计算机竞赛 深度学习YOLOv5车辆颜色识别检测 - python opencv

    🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习YOLOv5车辆颜色识别检测 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com

    2024年02月08日
    浏览(32)
  • python毕业设计 深度学习yolov5车辆颜色识别检测系统 - opencv

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月04日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包