在【计算机视觉(一)图像数据表示】中,我介绍了RGB和灰度两种颜色空间,并且介绍了像素的概念以及在程序上如何访问。
本期内容
接下来介绍从RGB到灰度的转换,以及两种我常用的颜色空间HSV和二值空间(严格来说属于灰度,只是只有0和255两个值)。
一、RGB转灰度
假如先不谈原理,RGB转灰度你会怎么做?先从我们知道的信息入手,RGB是三通道的,灰度只有一个通道,很自然的会联想到怎么把三个通道“融合”成一个通道,最直接的想法,也许是对于同一个RGB像素值,我们把这三个通道值求一个平均值作为灰度值。用公式表示一下就是:Gray = R * 1/3 + G * 1/ 3 + B * 1/3 。
好,那我们先来写这个程序看看效果。
函数名:rgb2gray_mean
功能:通过求通道平均值得到灰度图
输入:
好那我们来看看运行效果,再一次使用lena测试。
lena
运行的结果:
均值灰度
看起来还行。
OpenCV中也有自带的转换灰度的函数,cvtColor,代码也贴在这里:
注意第二个参数是BGR2GRAY,是的,OpenCV中默认的彩图通道排列是BGR(蓝绿红)而不是RGB,具体原因我也是道听途说,是因为一开始相机制造商从Sensor拿到的数据就是BGR的,这是他们制定的标准,尽管后来有很多软件也是默认采用RGB。
那么这个cvtColor的效果怎么样呢,请看
OpenCV转灰度
不知道你能否看出区别,不能的话请注意看头发的明暗交界处,cvtColor在本来该黑的地方更黑,该白的地方更白,就是对比度更强烈,还是看不出来的话用程序帮我们看看,数一下灰度值不相等的地方有多少个。
结果是:244157, 原图的大小是512x512,也就是总共262144个像素点,那这么看下来绝大部分的像素值都不一样,虽然我们看起来也要费点力才能看出来不同。这就说明OpenCV转灰度的方法跟我们拍脑门想的是不一样的,也就是对应到三个通道各自乘的系数是不一样的,假设:
Gray = a * R + b * G + c * B (a + b + c = 1)
a、b、c三个值应该怎么取能让图像看起来比较舒服呢?其实人眼对三原色的“偏好”是不一样的,研究表明人眼对红绿蓝的权重接近3:6:1,更精确的,对于上面的公式,a=0.299,b=0.587,c=0.114,这就是通常所说的心理学模型。在OpenCV中,为了减少浮点运算(浮点运算在一般的CPU中很耗时),使用了类似下面的转换方式:
'''
函数名:心理学模型转换灰度
输入:
返回:
经过测试,这跟OpenCV自带的转换函数cvtColor的效果是一模一样的。
二、HSV空间
HSV空间是由RGB空间演变过来的,RGB空间在几何上是一个正方体(详情请查阅【计算机视觉(一)图像数据表示】),而当你从正方体的一个顶点看向离它最远的另一个顶点时,就会看到一个六角锥体,这就是HSV空间的几何表达,如下图:
六角锥体
通常,我们会把顶上的这个六边形近似成一个圆,就变成了一个圆锥,像这样:
HSV圆锥
HSV三个轴的走动方向也在图上标出了,可以理解为一个有深度的极坐标系,我们只看Hue轴,沿着圆周方向走,可以看到每转动一定的角度,所表示的颜色就变了,而且不止红绿蓝,事实上这对应了我们认知上的所有颜色,因此,使用HSV空间的好处就是只要一个维度我们就能表示物体本来的颜色。那其他两个轴是表达什么信息的呢?具体可以参考百度百科,我这里只说些个人见解。S维度表示饱和度,更通俗的说,是打在物体上的白灯的亮度,比如你在黑夜中用手电筒照着个苹果,电量足够的话苹果看上去当然是正常的红色,电量不够也许看上去是暗红色,关掉手电也就啥都看不到黑漆漆一片了,这就是S维度的信息。V维度表示了一种物体自身的材质信息,是不是透明的,透明度有多少,同样拿照苹果这个例子,如果现在这个苹果换成了水晶苹果,灯光打上去以后看到的颜色也是不一样的,即使当初涂的颜色跟真实的苹果颜色一样,这是由于一些漫反射和折射造成的。
HSV的值域跟RGB的并不一样,其中H维度的值域是0-180,其他两个维度都是0-255,H不取到0-360也许是因为超过了uchar的范围。
HSV空间对颜色的描述是用户友好的,而RGB是硬件友好的。HSV空间在我日常学习中更多是作为颜色筛选的基础,人眼能区分的不同颜色的范围对应HSV的值都比较固定,下面是一个对照表:
HSV颜色对照表
现在举个实际应用的案例,比如我要对下面的图片做车牌识别,我的第一步是要把车牌的区域抠出来,车牌的底色是蓝色的,当然宝马的标志也有蓝色,但我们可以不管三七二十一先把蓝色的东西都抠出来再做筛选,这时候就可以用HSV空间。
车车
图片刚读入的时候是BGR格式的,这时候又要用到cvtColor转换到HSV,示例代码如:
显示HSV的效果如下:
现在我们要的是蓝色区域,查找上面的对照表就可以知道,我们要的是H值在100到124,S值在43到255,V值在46到255之间的像素点。怎么表达这个“要”跟“不要”呢?我们可以这么考虑,对于每个像素点只有“要”和“不要”两种状态,就像一盏灯的开关一样,于是我们可以创建一幅等大的图,在上面,“要”的像素点设为一个值,“不要”的像素点设为另一个值,这就是接下来要说的二值图,我也喜欢称其为掩码图。
三、二值图(掩码图)
处理完的结果如下图:
校验车牌的格式使用正则表达式去进行车牌校验,检测一个字符串是否为车牌格式private static final String LICENSE_PLATE_PATTERN = "^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵青藏川宁琼粤台港澳][A-Z][A-Z0-9]{5,6}$";public static boolean isValidLicensePlate(String lice
反向传播是一个基于微分的算法,在分析数据时沿着神经单元的层次结构反向输送数学反馈,从而能够更加深入、合理地理解权重的设置。反向传播学习算法也叫做错误反向传播学习算法,是一种通过梯度下降优化神经网络,从而最小化成本函数、提高网络性能的算法。对于正反馈网络来说,常用的学习成本函数是在学习集合的输出层汇总平方误差。梯度下降则通过逐渐改变网络中的权重,来最小化成本函数,实现最大程度的成本减少。在反向传播神
# 深度学习车牌识别教程## 前言在这篇文章中,我将向你介绍如何使用深度学习技术实现车牌识别。作为一名经验丰富的开发者,我将引导你完成整个流程,并提供代码示例来帮助你理解。## 整体流程以下是整个车牌识别的流程图。我们将分为四个主要步骤来实现它:数据预处理、训练模型、模型部署和测试。```mermaidsequenceDiagram 小白->>数据预处理: 收集并准备车牌
# 基于深度学习的车牌识别实现流程## 1. 简介深度学习在计算机视觉领域有广泛应用,其中之一就是车牌识别。本文将介绍基于深度学习的车牌识别的实现步骤和相关代码。## 2. 实现步骤| 步骤 | 描述 || --- | --- || 步骤一 | 车牌检测 || 步骤二 | 车牌识别 || 步骤三 | 整合车牌检测和车牌识别 |## 3. 车牌检测车牌检测是车牌识别的第一
# Java深度学习车牌识别GPU的实现指南在这篇文章中,我们将详细介绍如何使用Java进行深度学习的车牌识别,并利用GPU加速计算。整个过程分为几个主要步骤,让我们先看一个简洁的流程表:| 步骤 | 描述 || ---- | ------------------------ || 1 | 环境准备 ||
# 基于深度学习的车牌识别## 引言随着智能交通系统的快速发展,车牌识别技术在自动收费、交通监控和停车管理等领域得到了越来越广泛的应用。传统的车牌识别方法通常依赖于手工特征提取和模型设计,但这些方法在复杂背景和不同光照条件下的性能往往不尽人意。近年来,深度学习技术的快速发展为车牌识别提供了新的解决方案,显著提高了识别效率和准确率。## 深度学习简介深度学习是一种基于人工神经网络的机
【训练源码】车牌识别+车牌颜色用一个模型如图所示,右边是我们已经训练好的车牌字符识别模型,只需训练左边边颜色分支即可。
随着经济社会的迅速发展,人们的生活质量越来越高,随之而来的私家车数量也大规模提升。为了提高管理效率,缓解停车场、公路的压力,智能化的车辆识别技术已经屡见不鲜,逐渐落地使用并发展成熟。车牌作为车辆的识别身份凭证,我们以此为依据运用了OCR文字提取技术和超大广角识别。TSINGSEE青犀视频团队研发的车牌识别技术主要分为六个步骤:1.图像捕捉采集;2.预处理;3.车牌定位:主要定位出车辆牌照的位置;4
目录1--前言2--生成车牌数据集3--构建车牌数据集标签4--自定义字典5--训练模型6--模型转换和推理7--模型转换为onnx模型8--参考1--前言①系统:Ubuntu18.04②Cuda:11.0③CudaNN:8.04④配置Paddle环境2--生成车牌数据集①具体可见GitHub项目:Github生成车牌数据集#coding=utf-8import randomimport nu
随着5G、AI和IoT技术的蓬勃发展,智能连接时代已经来临。新兴的智能终端和解决方案将越来越依赖嵌入式技术。在网络边缘应用对智能功能的需求不断上升的背景下,尤其是在寻求AI商业化道路上,要实现技术的落地,不仅需要性能优越的算法模型和可靠的硬件支持,还需要把AI技术和硬件环境进行有机结合,再应用到具体的实际场景中。嵌入式AI对于这一需求及高实时处理的场景具有天然的优势,在无人机、智能汽车、产业机械、
接下来,就是把旋转矫正的小区域车牌图灰度化,所谓灰度化,就是以车牌中字的颜色为白色这一特点计算的,防止有些车牌上面很脏,但这些脏东西一般都不是白色的,所以可以把白色过滤出来,再二值化,从中抓取出文字进行识别!其实一个颜色是否为灰度色,主要就是看红绿蓝3基色是不是相等,如果相等则是灰度色,不相等就偏红,绿,蓝#include <stdio.h>#include <stdlib.h
随着科技技术的发展,人工智能的技术越来越优化,软硬件的算法和技术要求也越来越高,其中,TH-OCR算法在各个行业中有极其重要的作用,OCR识别算法-车牌识别在各个领域有很大的作用,比如:警务、交通、高速、停车场、汽车后市场等等领域都有运用到我们的车牌识别。 一、云端(服务器)车牌识别云端(服务器)车牌识别SDK产品是一款基于服务器平台的车牌识别OCR服务程序,企业可将该识别服务部署在自
最近没什么事,了解图像处理,所以学习了以下!由于我不太会C++,只能试着用C#编写代码!但是网上关于emgu cv的资料少之又少,而且很多还是英文的,而且讲的不详细。所以慢慢琢磨。写了个c#定位车牌的代码,不过效果不是很理想。参考了c++高手的代码!思路就是1.灰度化,竖向边缘检测2.自适应二值化处理3.形态学处理(膨胀和腐蚀)4.轮廓查找与筛选代码如下:Image<Bgr, Byte>
车牌识别技术是计算机视频图像识别技术在车辆牌照识别中的一种应用,它融合了ORC识别、云计算等多种技术,可将运动中的汽车牌照从复杂的背景中提取并识别出来,通过车牌提取、图像预处理、特征提取、车牌字符识别等流程,识别出车辆牌号、颜色等信息。AI智能分析网关目前也可支持车辆检测及识别、车牌识别功能,其中,字母和数字的单字识别率可达到99%,汉字的单字识别率可达到98%,车牌识别种类也非常齐全,各种反光、
车牌识别是一种图像处理技术,用于识别不同车辆。这项技术被广泛用于各种安全检测中。现在让我一起基于OpenCV编写Python代码来完成这一任务。车牌识别的相关步骤1.车牌检测:第一步是从汽车上检测车牌所在位置。我们将使用OpenCV中矩形的轮廓检测来寻找车牌。如果我们知道车牌的确切尺寸,颜色和大致位置,则可以提高准确性。通常,也会将根据摄像机的位置和该特定国家/地区所使用的车牌类型来训练检测算法。
内容及要求:一、设计说明 基于内容的图像检索(content-based image retrieval, CBIR)技术由机器自动提取包含图像内容的可视化特征,如颜色、形状、纹理等,对数据库中的图像和查询样本图像在特征空间进行匹配,检索出与样本相似的图像。其原理框图如图1所示。 图1 基于内容的图像检索结构框架方框
1、什easypr数据集; e asyPR是一个开源的中文车牌识别系统,其目标是成为一个简单、高效、准确的非限制场景(unconstrained situation)下的车牌识别库。 相比于其他的车牌识别系统,EasyPR有如下特点:它基于openCV这个开源库。这意味着你可以获取全部源代码,并且移植到opencv支持的所有平台。它能
车牌识别的方法 很多,比如深度学习算法的识别比如模式识别的算法研究等1 车牌识别方法一本文提出的方法 实现了车牌的定位车牌区域的细分然后将车牌的数值进行分割 进而可以得到每一个字符对于字符进行识别的 得到最后车牌的数值结果图像读取及车牌区域提取主要有:图像灰度图转化、图像边缘检测、灰度图腐蚀、图像的平滑处理以及车牌区域的边界值计算。其程序流程图如下:
想要模拟高并发用户访问的场景,用Jmeter5实现的话,单靠一台PC机,资源是不够的,包括单机的内存、使用端口数量等,所以最好是通过多台PC机组成几个集群来对服务器进行压测。本文目录:1.软硬件配置2.配置系统环境变量3.修改JMeter配置,开启代理机(Agent)功能4.搭建控制机(Controller)环境5.开启压测1.软硬件配置本文环境(控制机、代理机都一样):– Win7 64位– J
给组里的本科生讲一讲恶意软件,以及如何识别恶意软件。卷积神经网络(CNN)是一种深度学习模型,特别适用于处理图像和视频等数据。CNN包括:卷积层、激活层、池化层、全连接层。 ...
关于【大数据治理】一、什么是大数据治理二、大数据治理的特点三、大数据治理的应用场景四、大数据治理的重要性五、大数据治理的核心组件六、大数据治理的成功要素七、大数据治理的实施策略八、大数据治理的关键技术九、大数据治理的未来前景
2017年互联网领域薪资增幅最高的Top15职位中,新兴技术岗位普遍排在前列。而Python 作为当下人工智能、数据分析等领域的核心语言,以其简洁、新手友好的特点被广大的程序员所青睐。Python的特点1、Python使用C语言开发,但是Python不再有C语言中的指针等复杂的数据类型。2、Python具有很强的面向对象特性,而且简化了面向对象的实现。它消除了保护类型、抽象类、接口等面