基于OpenCV检测影像中的车辆
关注微信公众号:GISGO,获得更多GIS技术
近段时间一直在研究机器学习,主要学习的是数据挖掘和自然语言处理,期望能将所学与GIS结合起来。同时团队有成员在研究视觉,平时听到最多的是他们在讨论OpenCV这个库,通过他们的口也了解到这个库在图像处理领域十分强大。虽然OpenCV和我的核心工作没有关联,但是热衷于技术的我实在抵挡不了新鲜事的诱惑。
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac
OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++
类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。《百度百科》
OpenCV安装后,自带预训练好的人脸检测模型,通过简单的调用就能高效快速地检测人脸。
OpenCV通过提取样本图像Haar特征,采用Adaboost算法训练分类器。Haar特征和Adaboost的原理这里不多做介绍,大家自行搜索引擎。
既然OpenCV能高效识别人脸,是否也可以识别影像上的地物呢?
以下是我设计的技术路线,仅供参考
1、样本采集
从谷歌地球上下载分辨率最高级别的影像,采集车辆为正样本,不包含车辆的区域为负样本。最后正样本要统计尺寸并转为灰度图。样本尽量多,负样本要多于正样本。
正样本
负样本
2、准备训练数据
OpenCV安装好后,在安装目录有训练级联分类器的工具,通过CMD可以直接调用。
opencv_createsamples 用来准备训练用的正样本数据和测试数据。opencv_createsamples 能够生成能被opencv_haartraining 和 opencv_traincascade 程序支持的正样本数据。它的输出为以 *.vec为扩展名的文件,该文件以二进制方式存储图像
3、训练模型
OpenCV提供了两个程序可以训练自己的级联分类器opencv_haartraining与opencv_traincascade。opencv_traincascade是一个新程序,使用OpenCV2.x API 以C++编写。这二者主要的区别是opencv_traincascade支持Haar和 LBP(Local Binary Patterns)两种特征,并易于增加其他的特征。
4、测试模型
利用CasscadeClassifier调用训练好的模型,然后通过detectMultiScale去检测图形,具体参数可根据实际情况调节。
参数1:image–待检测图片,一般为灰度图像加快检测速度;
参数2:scaleFactor–表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;
参数3:minNeighbors–表示构成检测目标的相邻矩形的最小个数(默认为3个)。如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,这种设定值一般用在用户自定义对检测结果的组合程序上;
参数4:flags–要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,因此这些区域通常不会是人脸所在区域;
参数6、5:minSize和maxSize用来限制得到的目标区域的范围
5、结果展示
评价
首先可以肯定的是,可以使用OpenCV来进行影像中车辆的检测。利用Haar特征的车辆检测效果也比较好;通过Adaboost算法训练用于地物识别的分类器,算法效率比较高,自动化程度也很高;并且对于同一种遥感数据中的同一种地物可使用已经训练好的同一个分类器进行识别,分类器具有一定的普适性。但是,从结果也可以看到在复杂地形下识别率不高,阴影处的车辆识别率不高。并且受Adaboost算法特征的影响,错误样本对结果准确率影响很大,所以要求样本质量较高。
快,关注这个公众号,一起涨姿势~
基于OpenCV检测影像中的车辆相关推荐
- 利用OpenCV检测图像中的多个水果
OpenCV检测图像中的多个水果 最近面试碰到一个图像算法题,要求: (1)检测一副图像中的多个苹果并标识出来. (2)标识时需要将图像中苹果按照从大到小给定序号,显示出来. 基于以上两点,准备利用C ...
- 使用Python和OpenCV检测图像中的条形码
使用Python和OpenCV检测图像中的条形码 1. 效果图 2. 算法的步骤 3. 源码 参考 这篇博客将介绍使用计算机视觉和图像处理技术进行条形码检测的必要步骤,并演示使用Python编程语言和 ...
- opencv 识别长方形_使用OpenCV检测图像中的矩形
本文实例为大家分享了OpenCV检测图像中矩形的具体代码,供大家参考,具体内容如下 前言 1.OpenCV没有内置的矩形检测的函数,如果想检测矩形,要自己去实现. 2.我这里使用的OpenCV版本是3 ...
- 基于opencv的图像阴影消除车辆变道检测
基于opencv的图像阴影消除 详细代码在这!!! 最大滤波 def max_filtering(N, I_temp):wall = np.full((I_temp.shape[0]+(N//2)*2 ...
- 用python和opencv检测图像中的条形码
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在学习中发现快乐,在应用找到价值.这是我第五期分享图像技术应用的文 ...
- 用 OpenCV 检测图像中各物体大小
我们需要定义一个比值,它测量每个给定指标的像素个数. 我将其称为「像素/度量」比率,在下一节中我将更正式地定义它. 1.「像素/度量」比率 为了确定图像中物体的大小,我们首先需要使用一个参考物体进行「 ...
- 教你如何使用 OpenCV检测图像中的轮廓
@Author:Runsen 轮廓是连接所有具有某种颜色或强度的连续点的闭合曲线,它们代表图像中发现的对象的形状.轮廓检测是一种用于形状分析和物体检测和识别的有用技术. 轮廓检测并不是图像分割的唯一算 ...
- lstm中look_back的大小选择_基于机器学习检测僵尸网络中的域名生成算法
0x01 Absert 恶意软件通常使用域名生成算法(DGA)作为联系其C&C服务器的机制.近年来,基于机器学习已经提出了不同的方法来自动检测生成的域名.但也存在一些问题.第一个问题是,由于缺 ...
- python检测屏幕亮点_使用Python和OpenCV检测图像中的多个亮点
点击上方"蓝色小字"关注我呀 本文来自光头哥哥的博客[Detecting multiple bright spots in an image with Python and Ope ...
最新文章
- 通过WiFi对STC单片机程序下载和调试
- mysql下载之后找不见_Win7系统中安装mysql后找不到服务或出现找不到指定文件怎么办?...
- linux 常用命令汇总
- mysql 田_Mysql知识总结
- Pmcaff祝各位圣诞节快乐!
- python——变量的类型、不同类型变量的计算、变量的输入以及格式化输出
- 软件测试职业发展之路的反思(转)
- Unity URP高度雾效果Shader
- 85元一个万能工具箱,配齐24种螺丝刀+扳手,媲美德国工艺,家庭必备
- linux内存剩余量为什么这么少,为什么我的Linux系统中空闲内存如此之少?
- Sliverlight MD5
- 华为FusionSphere虚拟化解决方案介绍
- 提升手机麦克风音量_【奇酷小技巧】教你无需ROOT增大话筒、听筒和外放声音!...
- python编程快速上手办公自动化_关于Pdf偏执狂的解答
- 下载scikit_learn
- Xamarin.Forms 之我的花园 - 2.从照片库选择图片和拍照功能
- 学成在线首页【前端知识】
- 超越成功:经理人需提升的十二项自我管理能力
- java毕设_城市公交系统
- 在Windows设置里改不了默认浏览器
热门文章
- Android 8.0系统源码分析--开篇
- 电子商务的核心是不是计算机技术,电子商务的核心内容是网络营销
- 洛谷——P2077 红绿灯
- Property 'filter' does not exist on type 'Observable' 报错解决方法
- 屏蔽节点的鼠标点击选择文字的方法
- 计算机科学与技术python方向_专业解读丨计算机科学与技术
- jpa oracle 传参int类型判空_SQL查询:Oracle、mysql、HQL查询语句差异
- 关于Python常见功能使用的博客收藏
- 【译】如何写出一份优秀的软件设计文档
- 1. ansible-playbook 变量定义与引用