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

article/2025/9/28 16:08:33

目录

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

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

步骤一:灰度化处理

步骤二:帧差处理

步骤三:二值化处理

步骤四:图像降噪

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

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

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

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


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

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

步骤一:灰度化处理

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

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

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

步骤二:帧差处理

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

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

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

步骤三:二值化处理

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

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

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

步骤四:图像降噪

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

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

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

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

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

    //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);}

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

#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;
}

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

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

但是,帧差法的运动目标检测,在夜晚监控中是非常广泛地应用到,因为有任何的风吹草动,都会被框选识别,可以用于安防管理


http://chatgpt.dhexx.cn/article/0yKIEbpG.shtml

相关文章

【OpenCV】车辆识别 C++ OpenCV 原理介绍 + 案例实现

目录 前言 一、图像处理 &#x1f4bb;二值化处理 &#x1f4bb;膨胀、腐蚀 &#x1f4bb;开运算、闭运算 二、案例实现 Step1&#xff1a;灰度处理 Step2&#xff1a;对视频进行帧差处理 Step3&#xff1a;二值化处理 Step4&#xff1a;腐蚀处理 Step5&#xff1a…

【OpenCV】车辆识别 目标检测 级联分类器 C++ 案例实现

目录 前言 一、目标检测技术 二、样本采集工作原理 三、创建自己的级联分类器 Step1&#xff1a;准备好样本图像 Step2&#xff1a;环境配置&#xff08;OpenCV win10&#xff09; Step3&#xff1a;设置路径 Step4&#xff1a;实现样本数据采集 Step5&#xff1a;实…

使用华为modelarts进行车辆识别

要求&#xff1a;从图像&#xff08;图3&#xff09;中检测并识别出车辆。车辆检测和识别算法可采用深度学习、BP网络或特征匹配等方法&#xff0c;方法不限。 图5-1待识别图像 原理&#xff1a;ModelArts是面向AI开发者的一站式开发平台&#xff0c;支持自动学习的功能&#…

车辆识别(特征提取+svm分类器)

以下为udacity的SDCND的一个项目 ps:这里使用的是用opencv进行特征提取+svm分类器的方法实现物体检测,是在深度学习流行前比较经典的实现方法 项目描述: 使用openCV提取图片特征,训练svm分类器,分类车辆与非车辆。用训练好的模型识别汽车前置摄像头记录视频中的车辆。 …

深度学习目标检测:YOLOv5实现车辆检测(含车辆检测数据集+训练代码)

深度学习目标检测&#xff1a;YOLOv5实现车辆检测(含车辆检测数据集训练代码) 目录 深度学习目标检测&#xff1a;YOLOv5实现车辆检测(含车辆检测数据集训练代码) 1. 前言 2. 车辆检测数据集说明 &#xff08;1&#xff09;车辆检测数据集 &#xff08;2&#xff09;自定…

案例-使用python实现基于opencv的车辆识别

写在开头&#xff0c;接触opencv也有很长一段时间了&#xff0c;中间还接触了halcon。但都是基于C实现&#xff0c;发现如果有什么idea&#xff0c;还是使用python可以快速实现。基于C版本的后期会有更新。 首先&#xff0c;这个案例是一个老生常谈的问题-车辆识别。首先我们要…

MySQL清空单表数据

一&#xff1a;问题背景 1. 问题描述 之前测试1千万数据插入MySQL数据库里面,分别使用单线程的方式和线程池的方式对比测试&#xff0c;查看效果,但是插入了1千万数据后,由于是测试数据,现在不能在新建一张表浪费存储空间,还是之前的表,要清空原来的数据.有哪些方式可用&#x…

mysql清空表数据_mysql数据库之如何清空表中数据

本篇文章主要讲述的是在数据库中使用清空命令&#xff0c;具有一定学习价值&#xff0c;有需要的朋友可以了解一下&#xff0c;希望能够对你有所帮助。 在做数据迁移&#xff0c;数据清洗或者写web项目时要将数据替换更新&#xff0c;那么有时要将表做清空处理 常用的清空数据表…

mysql删除表中所有数据_MySQL删除或清空表中数据的方法

原标题&#xff1a;MySQL删除或清空表中数据的方法 要想把MySQL中的数据删除或清空&#xff0c;可以通过两种方法来实现&#xff1a;DELETE语句和TRUNCATE TABLE语句。 DELETE语句可以将表中所有记录都删除&#xff0c;也可以指定WHERE子句&#xff0c;对要删除的记录进行选择;…

清空MySQL单库下所有表数据 || 删除MySQL单库下所有表

一、清空MySQL单库下所有表数据 -- 清空MySQL单库下所有表数据 SELECT CONCAT(truncate table ,TABLE_NAME,;) AS PLEASE_EXEC_ALL_SQL FROMinformation_schema.TABLES WHERETABLE_SCHEMA datagateway_std;如下图&#xff0c;然后复制所有查询结果&#xff0c;依次执行清表命…

Mysql如何清空数据库中所有的表数据

“db”是数据库名称 SELECT CONCAT(truncate table ,TABLE_NAME,;) AS a FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA db ; 全部复制出来运行即可 有外键约束的话&#xff0c;我们可以使用 SET FOREIGN_KEY_CHECKS0; 来禁用外键约束&#xff0c;执行完我们的语句之…

90个外国英文网站强力推荐!!!

2019独角兽企业重金招聘Python工程师标准>>> http://www.mtime.com/group/lazy/discussion/163374/ 转载于:https://my.oschina.net/crazyinsomnia/blog/2739

常用的英文文献网站

最常用的英文文献网站当然是&#xff1a;sci-hub。 除此之外&#xff0c;推荐几个比较常用的英文文献网站&#xff1a; Elsevier ScienceDirect 数据库试用&#xff1a; http://www.sciencedirect.com 科学引文索引数据库&#xff08;SCI&#xff09;学术资源&#xff1a; h…

十大实用网站推荐(1)

Iiconfont矢量图标库http://www.iconfont.cn/设计师必备网站&#xff0c;成千上万个矢量图标&#xff0c;真正的“图标库”&#xff1a; 稿定设计https://www.gaoding.com/有点懒&#xff1f;抠图太麻烦&#xff1f;做设计有点烦&#xff1f;来这个网站看看吧&#xff0c;懒人…

英语网站学习

一说到英语学习网站&#xff0c;脑子里肯定就是啥BBC&#xff0c;TED&#xff0c;华尔街日报啊&#xff0c;但如果你是英语小白&#xff0c;你一定看的懂吗&#xff1f;太多的专业词汇&#xff0c;看都看不懂&#xff0c;还怎么帮助你快速提升英语&#xff1f;英语网站是学习的…

强烈推荐这 15 个网站!

作者 | ithuangqing 来源 | 编码之外&#xff08;ID&#xff1a;ithuangqing&#xff09; 电子书&#xff1f;纸质书&#xff1f;我喜欢免费 不得不说&#xff0c;纸质书看起来是最有感觉的&#xff0c;可是纸质书也有非常不好的两点&#xff1a; 搬家的时候真的头大贵&#x…

常用的15个国外网站

1.Random-Image-Api 地址&#xff1a;https://source.unsplash.com/ Random-Image-Api 一个能够获取随机图片的 Api&#xff0c;基于 Spring Boot 构建可读取本地图片列表的地址&#xff0c;并提供随机访问服务&#xff0c;可配置域名白名单访问。 2. Carbon 地址&#xff1…

国外有什么好的网站推荐?

先来一张用百度脑图做的“国外优秀网站”思维导图&#xff0c;让你一目了然。 / 一&#xff0c;知识类 1、维基百科-自由的百科全书&#xff1a;点击打开链接 2、Coursera-致力于普及全世界最好的教育:点击打开链接 3、IMDB- 互联网电影资料库:点击打开链接http://www. …

国外常用网站

作者&#xff1a;Allen9527 链接&#xff1a;https://www.zhihu.com/question/20247711/answer/113476501 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 放眼看世界&#xff0c;才能看得更远 &#xff08;持续更…

浅谈什么是嵌入式以及嵌入式就业前景

近期&#xff0c;很多问我什么是嵌入式&#xff1f;其实关于这个问题真的不好实际性的形容表达&#xff0c;毕竟不是一个实物和东西&#xff0c;让你看到见摸的着&#xff0c;但是它确实存在你的生活中&#xff0c;工作中。今天粤嵌就来浅谈一下&#xff0c;什么是嵌入式以及嵌…