位置: IT常识 - 正文

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

编辑:rootadmin
【OpenCV】车辆识别 C++ OpenCV 原理介绍 + 案例实现 目录

前言 

一、图像处理

💻二值化处理

💻膨胀、腐蚀

💻开运算、闭运算

二、案例实现

Step1:灰度处理

Step2:对视频进行帧差处理

Step3:二值化处理

Step4:腐蚀处理

Step5:膨胀处理 

Step6:标记、框选目标

💡完整代码

三、总结 

前言 

推荐整理分享【OpenCV】车辆识别 C++ OpenCV 原理介绍 + 案例实现(opencv识别车牌),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opencv识别车牌,opencv车辆识别的原理,opencv识别车牌,opencv识别车牌,基于opencv的车辆检测系统,基于opencv的车辆检测系统,基于opencv的车辆检测系统,opencv识别车牌,内容如对您有帮助,希望把文章链接给更多的朋友!

本文主要以车辆识别为目标,利用 C++语言 结合 Qt + OpenCV 进行图像处理相关步骤的讲解

一、图像处理

💻二值化处理

二值化:是通过遍历灰度图中点,将图像信息二值化处理,处理过后的图片只有黑白两种色值

📍作用:

图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓

📍全局阈值:

函数:threshold()

参数:

参数1:InputArray类型的src,输入数组,填单通道 , 8或32位浮点类型的Mat即可 

参数2:OutputArray类型的dst,函数调用后的运算结果存在这里,即这个参数用于存放输出结果,且和第一个参数中的Mat变量有一样的尺寸和类型

参数3:double类型的thresh,阈值的具体值

参数4:double类型的maxval,当第5个参数阈值类型type取 THRESH_BINARY 或THRESH_BINARY_INV阈值类型时的最大值

参数5:int类型的type,取阀值的算法

📍局部阈值:

函数:adaptiveThreshold()

参数:

参数1:InputArray类型的src,输入图像,填单通道,单8位浮点类型Mat即可

参数2:函数运算后的结果存放在这。即为输出图像

参数3:预设满足条件的最大值

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

参数4:指定自适应阈值算法,可选择ADAPTIVE_THRESH_MEAN_C 或 ADAPTIVE_THRESH_GAUSSIAN_C两种

参数5:指定阈值类型,可选择THRESH_BINARY或者THRESH_BINARY_INV两种

(即二进制阈值或反二进制阈值)

参数6:表示邻域块大小,用来计算区域阈值,一般选择为3、5、7等

参数7:参数C表示与算法有关的参数,它是一个从均值或加权均值提取的常数,可以是负数

💻膨胀、腐蚀

膨胀和腐蚀是针对图片的二值化数据进行操作的主要是针对高亮部分膨胀就是使用算法,将图像的边缘扩大些,作用就是将目标的边缘或者是内部的坑填掉 腐蚀就是使用算法,将图像的边缘腐蚀掉,作用就是将目标的边缘的“毛刺”踢除掉

1️⃣膨胀过程 

膨胀是求局部最大值的操作,核B与图形卷积,即计算核B覆盖的区域的像素点的最大值,并把这个最大值赋值给参考点指定的像素,这样就会使图像中的高亮区域逐渐增长

2️⃣腐蚀过程

腐蚀可以理解为B的中心(锚点)沿着A的内边界走了一圈。腐蚀也是对高亮部分而言,A区域之外的部分 < A的高亮像素,所里里面被外面取代

💻开运算、闭运算

1️⃣开运算:先腐蚀再膨胀,用来消除小物体 

2️⃣闭运算: 先膨胀再腐蚀,用于排除小型黑洞

二、案例实现

Step1:灰度处理将传入的两帧先进行处理,先将其转化成RGB类型图片再转化为灰度图  cvtColor(frontFrame,frontGray,CV_BGR2GRAY);//前一帧灰度处理 cvtColor(afterFrame,afterGray,CV_BGR2GRAY);//后一帧灰度处理Step2:对视频进行帧差处理将两帧图片进行帧差处理,将对比结果存储在diff中 //【帧差法】对比两帧图像之间差异,捕获运动物体 //缺点:所有运动的物体都会展现 Mat diff; absdiff(frontGray,afterGray,diff);//前后两帧对比存在diff中灰度图 + 帧差处理后,效果如下:

Step3:二值化处理我们可以看到,公交车的识别区块并不是很明显,因此,接下来我们对视频进行二值化处理 //【二值化】黑白分明 //局部阈值 threshold(diff,diff,25,255,CV_THRESH_BINARY);黑白更加分明,效果如下:

Step4:腐蚀处理我们会发现,二值化处理后,比原来多出好多的白色的小点,这时候我们就需要进行腐蚀处理,腐蚀掉<x*x方块大小的像素,这里设置了4*4,来清除大部分噪点  //【腐蚀处理】将背景中的白色噪点尽可能去除 降噪处理 Mat element = cv::getStructuringElement(MORPH_RECT,Size(4,4));//小于4*4方块的白色噪点都会被腐蚀 erode(diff,diff,element);腐蚀处理之后,效果如下:

Step5:膨胀处理 噪点相较于之前确实少了很多,但是运动的物体也被腐蚀掉了很多,可能会识别不到一些移动车辆,这里我们继续进行膨胀处理,将我们的目标像素图像变“胖” //【膨胀处理】将白色区域扩大,更加明显,利于目标识别 Mat element2=cv::getStructuringElement(MORPH_RECT,Size(30,30)); dilate(diff,diff,element2);膨胀处理后,效果如下:

Step6:标记、框选目标最后,将我们的目标像素图像进行标记,并且加一个框把移动的物体框选出来 //动态物体的位置进行标记 vector<vector<Point>>contours; findContours(diff,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE,Point(0,0)); //提取关键点 vector<vector<Point>>contours_poly(contours.size()); vector<Rect>boundRect(contours.size()); //确定四个点来进行框住目标物体 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(255,0,0),2);//Scalar颜色 }完成上述所有步骤后,效果如下: 

💡完整代码#include <iostream>#include <opencv2/opencv.hpp>using namespace std;using namespace cv;Mat MoveCheck(Mat &frontFrame,Mat &afterFrame){ Mat frontGray,afterGray;//前后灰度处理 Mat resFrame = afterFrame.clone(); //【灰度处理】 cvtColor(frontFrame,frontGray,CV_BGR2GRAY);//前一帧灰度处理 cvtColor(afterFrame,afterGray,CV_BGR2GRAY);//后一帧灰度处理 //【帧差法】对比两帧图像之间差异,捕获运动物体 //缺点:所有运动的物体都会展现 Mat diff; absdiff(frontGray,afterGray,diff);//前后两帧对比存在diff中 //imshow("diff",diff); //【二值化】黑白分明 //局部阈值 threshold(diff,diff,25,255,CV_THRESH_BINARY); //imshow("threshold",diff); //【腐蚀处理】将背景中的白色噪点尽可能去除 降噪处理 Mat element = cv::getStructuringElement(MORPH_RECT,Size(4,4));//小于4*4方块的白色噪点都会被腐蚀 erode(diff,diff,element); //imshow("erode",diff); //【膨胀处理】将白色区域扩大,更加明显,利于目标识别 Mat element2=cv::getStructuringElement(MORPH_RECT,Size(30,30)); dilate(diff,diff,element2); //imshow("dilate",diff); //开运算:先腐蚀后膨胀,去掉高亮物体背景中白色的噪点,凸显高亮物体 //闭运算:先膨胀后腐蚀,去掉高亮物体内部的黑色小坑洞,凸显高亮物体 //动态物体的位置进行标记 vector<vector<Point>>contours; findContours(diff,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE,Point(0,0)); //提取关键点 vector<vector<Point>>contours_poly(contours.size()); vector<Rect>boundRect(contours.size()); //确定四个点来进行框住目标物体 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(255,0,0),2);//Scalar颜色 } return resFrame;}int main(int argc, char *argv[]){ Mat frame; Mat temp; Mat res; int count = 0; VideoCapture cap("C:/Users/86177/Desktop/image/carMove.mp4");//视频路径 while(cap.read(frame)) { count++; if(count == 1) { res = MoveCheck(frame,frame); } else { res = MoveCheck(temp,frame); } temp = frame.clone(); imshow("frame",frame); imshow("res",res); waitKey(25);//延时 } return 0;}三、总结本文主要讲解了OpenCV图像处理基本的原理,包括帧差法、二值化、膨胀腐蚀、开运算、闭运算以车辆识别为例子,详细讲解了图像处理相关操作,在各个步骤是怎么样的一个效果车辆识别在我们日常生活中非常常见,是一个很经典的案例,本案例算是初步实现,但是,通过案例也发现,帧差法的缺点显而易见,测试视频存在很多干扰,比如说其他移动的物体,例如,风比较大,树叶跟着动,我们的框选位置就会受到干扰,不一定是我们预期想要的目标,接下来也会继续对这方面进行深入探究和学习,争取做到更好!

以上就是本文的全部内容啦!如果对您有帮助,麻烦点赞啦!收藏啦!欢迎各位评论区留言!!!

本文链接地址:https://www.jiuchutong.com/zhishi/297618.html 转载请保留说明!

上一篇:本地如何搭建一个Stable Diffusion 的AI绘画工具?(搭建本地yum)

下一篇:工具篇(七)MarkDown(工具tj)

  • 网易云一起听歌一方是vip两个人都能听吗(网易云一起听歌怎么添加自己想听的歌曲)

    网易云一起听歌一方是vip两个人都能听吗(网易云一起听歌怎么添加自己想听的歌曲)

  • 华为p40的来电闪光灯如何设置(华为p40的来电闪光灯怎么设置)

    华为p40的来电闪光灯如何设置(华为p40的来电闪光灯怎么设置)

  • 苹果11黑屏强制重启(苹果11黑屏强制也开不了没有充电显示了)

    苹果11黑屏强制重启(苹果11黑屏强制也开不了没有充电显示了)

  • 淘宝商家能否隐藏追评(淘宝店铺能隐藏吗)

    淘宝商家能否隐藏追评(淘宝店铺能隐藏吗)

  • 摇骰子怎么摇到自己想要的数字(摇骰子怎么摇到最大)

    摇骰子怎么摇到自己想要的数字(摇骰子怎么摇到最大)

  • 投屏只投画面不投声音(投屏只投图像)

    投屏只投画面不投声音(投屏只投图像)

  • xs是双层主板吗(xs是双层主板还是单层)

    xs是双层主板吗(xs是双层主板还是单层)

  • 网易云音乐黑胶vip有什么用(网易云音乐黑胶是什么意思)

    网易云音乐黑胶vip有什么用(网易云音乐黑胶是什么意思)

  • 手机屏幕出现彩色细线(手机屏幕出现彩色斑块怎么消除)

    手机屏幕出现彩色细线(手机屏幕出现彩色斑块怎么消除)

  • 一加8pro是什么品牌手机(一加8Pro是什么传感器)

    一加8pro是什么品牌手机(一加8Pro是什么传感器)

  • 小米mix2s多重(小米mix2s多重多少克)

    小米mix2s多重(小米mix2s多重多少克)

  • iphonexr夜间耗电严重原因(xr夜间掉电)

    iphonexr夜间耗电严重原因(xr夜间掉电)

  • b站免流量包怎么退订(b站免流量包怎么开启)

    b站免流量包怎么退订(b站免流量包怎么开启)

  • 换了手机微信收藏是否可以恢复(换了手机微信收藏里的东西不见了)

    换了手机微信收藏是否可以恢复(换了手机微信收藏里的东西不见了)

  • 苹果xrnfc功能怎么开启门禁卡(苹果xrnfc功能怎么用学校门禁卡)

    苹果xrnfc功能怎么开启门禁卡(苹果xrnfc功能怎么用学校门禁卡)

  • 微机总线有哪三个组成(微机的总线包括哪些总线)

    微机总线有哪三个组成(微机的总线包括哪些总线)

  • iphonexsmax有指纹识别吗(xs max有指纹)

    iphonexsmax有指纹识别吗(xs max有指纹)

  • 趣ar是什么意思(趣ar3dqmoji软件)

    趣ar是什么意思(趣ar3dqmoji软件)

  • 苹果11夜间模式怎么关闭(苹果11夜间模式怎么开)

    苹果11夜间模式怎么关闭(苹果11夜间模式怎么开)

  • 网页url是什么(网站url是什么)

    网页url是什么(网站url是什么)

  • 目前管控平台适应哪种认证方式(管控平台提供哪些服务)

    目前管控平台适应哪种认证方式(管控平台提供哪些服务)

  • 英语趣配音怎么双人录音(英语趣配音怎么退出登录)

    英语趣配音怎么双人录音(英语趣配音怎么退出登录)

  • 拼多多上0.01元拼手机是真的吗(拼多多上0.01元的虚拟商品)

    拼多多上0.01元拼手机是真的吗(拼多多上0.01元的虚拟商品)

  • 华为手机怎么删除界面新闻(华为手机怎么删除内存清理)

    华为手机怎么删除界面新闻(华为手机怎么删除内存清理)

  • excel怎么打印在一张纸上(excel怎么打印在中间)

    excel怎么打印在一张纸上(excel怎么打印在中间)

  • 微信小程序隐藏滚动条的方法(微信小程序隐藏航班)

    微信小程序隐藏滚动条的方法(微信小程序隐藏航班)

  • Redis 被问麻了...(redis常见问题解决)

    Redis 被问麻了...(redis常见问题解决)

  • 私立幼儿园需要纳税吗
  • 出租房屋转为投资房屋
  • 营业净利率和总资产净利率的区别
  • 房租押金不退还怎么处理
  • 收到对方红字发票如何做账
  • 小企业会计制度及核算办法
  • 销售使用过未抵扣进项税额的货运汽车
  • 换货补差价怎么补给商家
  • 公司收到银行转账会计分录
  • 报销油费如何写摘要及会计分录怎么做?
  • 建筑行业挂靠代扣税款如何入账?
  • 开完红字发票后,正数发票如何开具?
  • 应付账款不付处理分录如何写?
  • 定额发票已经取得怎么办
  • 企业出口退税办理流程
  • 劳务公司开票是开劳务费还是工程服务
  • 工资分两次发的风险是什么?
  • 网上勾选认证每月时间要求
  • 增值税普通发票有什么用
  • 股东房产用于公司经营的是否交房产税
  • 用于职工集体福利的外购货物可以抵进项税额吗
  • 地下人防设置要求
  • 出口退税需要什么单据
  • 行政单位结转结余形成的原因
  • 经营预算的基本内容包括
  • 网络共享每次都要输入密码
  • 华为分享的文件在电脑哪个文件夹
  • 劳务报酬纳税计算器
  • 确认收入的必要条件
  • vue实现打印
  • 国家差旅费报销最新标准住宿
  • 存货损失账务处理新规定
  • php js
  • 【torch.nn.Parameter 】参数相关的介绍和使用
  • element ui停止
  • cnn卷积神经网络python代码
  • 固定资产改造更新
  • 以固定资产抵账什么意思
  • 凭证摘要写错了已经结账
  • 对公银行卡账户
  • ps魔棒工具选择图像时在容差数值较大的是
  • 不走流水开发票可以吗
  • 固定资产怎么确定折旧年限
  • 公司收到个人汇款怎么开发票
  • 新会计准则哪一年颁布
  • 购销合同印花税税率
  • 商业保险如何做伤残鉴定的
  • 年终奖政策,提成怎么算
  • 库存盘亏进项税怎么抵扣
  • 产品销售的账务处理办法
  • 专票已认证但又不能抵扣
  • 根据银行流水如何计算成本
  • 公司向个人借款分录
  • 土地使用权作为存货怎么入账
  • 公司租用私人汽车怎么操作
  • 材料报废 开什么发票
  • MySQL下载安装步骤详解
  • mysql几天能学会
  • mysql登陆error2002
  • win8网络连接
  • linux 设置文件系统
  • windowxp背景图
  • 开机密码怎么删除
  • win7暗藏的超实用快捷键汇总
  • 不用第三方软件获取鼠标坐标
  • win7取消还原
  • launch.exe打不开
  • linux常用命令cat
  • 如何下载安装windows10
  • windows图片锁屏
  • win8.1无法更新
  • unity 3d数学
  • js message事件
  • python pyb库
  • listary 替代
  • vue cli3 webpack配置
  • Web Inspector:关于在 Sublime Text 中调试Js的介绍
  • nodejs创建项目
  • 国家税务总局公告2023第12号
  • 中国税务局发票
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设