车牌识别之预处理(灰度化,去噪,二值化,分割)

2023-05-16

灰度化

灰度即R=G=B 二值化只取255 0
对图片进行灰度化处理,目的是 1 减少数据量 (减少不明显) 2 为二值化准备
对数据进行灰度发现数据量减少并不明显 尤其是 最大 和 平均 灰度法 权重法数据量减少明显 但是权重不容易处理(权重需要自己去调整到自己想要的)

python 二值化代码

1. 使用cv2方法(注意cv2读取图片是BGR通道,保存的图片时单通道)

def gray_cv(img):
    img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 图片灰度化,使用BGR转换灰度。效果稍微好点
    plt.imshow(img2)
    plt.show()
    cv2.imwrite("gray_cv", img2)
    img3 = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)  # RGB转换为灰度
    plt.imshow(img3)
    plt.show()

在这里插入图片描述

2. 最大值二值化(全三个通道中最大的值 R=B=G=max)

def gray_max(img):
    gray_max_rgb_image = img.copy()  # 复制图像,用于后面保存灰度化后的图像bgr值矩阵
    img_shape = img.shape  # 返回一位数组(高,宽,3)获得原始图像的长宽以及颜色通道数,一般彩色的颜色通道为3,黑白为1
    for i in range(img_shape[0]):  # 按行读取图片的像素bgr
        for j in range(img_shape[1]):  # 对每一行按照列进行每一个像素格子进行读取
            gray_max_rgb_image[i, j] = max(img[i, j][0], img[i, j][1], img[i, j][2])  # 求max灰度值
    print(gray_max_rgb_image)
    cv2.imwrite("gray_max1.jpg", gray_max_rgb_image)  # 保存图片
    plt.imshow(gray_max_rgb_image)
    plt.show()

在这里插入图片描述

3. 平均值灰度化(求三个通道平均值 R=G=B=avg)

def gray_avg(img):
    gray_avg_rgb_image = img.copy()  # 复制图像,用于后面保存灰度化后的图像bgr值矩阵
    img_shape = img.shape  # 返回一位数组(高,宽,3)获得原始图像的长宽以及颜色通道数,一般彩色的颜色通道为3,黑白为1
    for i in range(img_shape[0]):  # 按行读取图片的像素bgr
        for j in range(img_shape[1]):  # 对每一行按照列进行每一个像素格子进行读取
            gray_avg_rgb_image[i, j] = (int(img[i,j][0])+int(img[i,j][1])+int(img[i,j][2]))/3 # 求平均灰度值
    print(gray_avg_rgb_image)
    cv2.imwrite("gray_avg1.jpg", gray_avg_rgb_image)
    plt.imshow(gray_avg_rgb_image)
    plt.show()

在这里插入图片描述

4. 权重法平均值(跟选取权重有关,权重不一定通用)

def gray_weight(img):   # 参数没有调好,不好调,图像大小减小多
    # wr, wg, wb = 0.11, 0.59, 0.11
    wr, wg, wb =  0.299, 0.587, 0.114
    gray_weightmean_rgb_image = img.copy()  # 复制图像,用于后面保存灰度化后的图像bgr值矩阵
    img_shape = img.shape  # 返回一位数组(高,宽,3)获得原始图像的长宽以及颜色通道数,一般彩色的颜色通道为3,黑白为1
    for i in range(img_shape[0]):  # 按行读取图片的像素bgr
        for j in range(img_shape[1]):  # 对每一行按照列进行每一个像素格子进行读取
            gray_weightmean_rgb_image[i, j] = (int(wr*img[i,j][2])+int(wg*img[i,j][1])+int(wb*img[i,j][0])) / 3  # 求设置RBG不同权重灰度值
    print(gray_weightmean_rgb_image)
    cv2.imwrite("gray_weight1.jpg", gray_weightmean_rgb_image)
    plt.imshow(gray_weightmean_rgb_image)
    plt.show()

在这里插入图片描述

去噪(高斯滤波 双边滤波(避免边缘模糊))推荐视频,讲解去噪

1噪点产生原因:

1 图片获取过程中:由于受传感器材料属性、工作环境、电子元器件和电路结构等影响,会引入各种噪声,如电阻引
起的热噪声、场效应管的沟道热噪声、光子噪声、暗电流噪声、光响应非均匀性噪声。

2 信号传输过程中:由于传输介质和记录设备等的不完善,数字图像在其传输记录过程中往往会受到多种噪声的污染。另外,在图像处理的某些环节当输入的对象并不如预想时也会在结果图像中引入噪声。

2双边滤波(双边滤波器可以很好地减少不需要的噪声,同时保持边缘相当清晰。然而,它是与大多数过滤器相比非常慢。)

def bi_fillter(img):

    time1 = time.time()
    dst1 = cv2.bilateralFilter(src=gray_img, d=0, sigmaColor=15, sigmaSpace=20)
    cv2.imwrite("bi_img.jpg", dst1)  # 图片大小100*50 效果更好。
    plt.imshow(dst1)
    plt.show()
    time2 = time.time()
    print("gray_bi",time2-time1)
    return dst1

在这里插入图片描述

二值化(只有0或255)

全零 是黑色 全255 白色,自己设置一个阀门,把大于阀门数的设为255,否则为0

def erzhihua(img):
    gray_max_rgb_image = bi_img.copy()  # 复制图像,用于后面保存灰度化后的图像bgr值矩阵
    bi_img_shape = bi_img.shape  # 返回一位数组(高,宽,3)获得原始图像的长宽以及颜色通道数,一般彩色的颜色通道为3,黑白为1
    for i in range(bi_img_shape[0]):  # 按行读取图片的像素bgr
        for j in range(bi_img_shape[1]):  # 对每一行按照列进行每一个像素格子进行读取

            rgb_max = max(bi_img[i, j][0], bi_img[i, j][1], bi_img[i, j][2])  # 求最大灰度化的基础进行二值化
            if rgb_max > 76:  #  可以通过调试,查看变量方法,设置阀值
                gray_max_rgb_image[i, j] = 255
            else:
                gray_max_rgb_image[i, j] = 0
    plt.imshow(gray_max_rgb_image)

    return gray_max_rgb_image

在这里插入图片描述

字符分隔

字符分隔的三种方法:基于边缘轮廓的字符分隔(常用) 基于投影阀值的字符分隔 基于神经网络聚类的字符分隔
(1)垂直投影分割法:把二值图像在垂直以及水平方向上进行投影,从而形成了二值统计图像,从而确定字符位置。使用此方法不仅程序设计要求较为简单,而且分割速度快。但是分割方法过于固定,区域多为方形。

(2)聚类分析分割法:把字符通过形态学方式构成连通域,再与已知特征相结合完成字符分割。使用此种方法能够在汉字字符不连通的情况下也能完成分割任务,但是这种方法不仅计算复杂,且效率不高。

(3)轮廓提取分割法:首先需要对二值图像进行边缘检测计算,然后根据字符的边界将字符框选并分割出来,使用此种方法分割出来的字符边缘非常准确,但是与聚类分析的分割方法相似,具有计算量大,计算速度慢的缺点。

垂直投影法:对应车牌变形的效果不太好,而且图片质量越高,投影效果越好

def touyin2(img):

    paintx = np.zeros(img.shape)
    h, w = img.shape[0], img.shape[1]
    a = [0 for i in range(w)]
    for j in range(0, w):  # 遍历一行
        for i in range(0, h):  # 遍历列
            if img[i, j][0] == 0:  # 如果改点为黑点
                a[j] += 1  # 该列的计数器加一计数  相对于计算某列的白像素

    for j in range(0, w):  # 遍历每一列
        for i in range(a[j]):  # 从该列应该变黑的最顶部的点开始向最底部涂黑
            paintx[i, j] = 255  # 涂黑

    plt.imshow(paintx)
    plt.show()

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

车牌识别之预处理(灰度化,去噪,二值化,分割) 的相关文章

  • [编程题]提取不重复的整数

    Talk is cheap show me the code 一 问题描述 输入一个int型整数 xff0c 按照从右向左的阅读顺序 xff0c 返回一个不含重复数字的新的整数 输入描述 xff1a 输入一个int型整数 输出描述 xff1
  • [编程题]判断两个IP是否属于同一子网

    Talk is cheap show me the code 一 问题描述 子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据 二 问题分析 这道题又是一道坑题 xff0c 题意没描述清楚 xff0c 首先判断一个ip或者m
  • centos7永久关闭防火墙

    首先输入用户名和密码进入centos7 接着先是看centos7的防火墙的状态 xff0c 查看的命令为 sudo systemctl status firewalld 查看后 xff0c 看到active running 就意味着防火墙打
  • ubuntu系统安装Go和liteide及环境配置

    大家好 xff0c 我是加摩斯 xff0c 觉得文章有帮助的小伙伴 xff0c 记得一键三连哟 xff5e 申明 xff1a 原创 xff0c 转载前请与我沟通 搭建环境是编程中最基本的工作 xff0c 但有时方法不对 xff0c 也会踩到
  • OVS的作用OVS 总体架构、源码结构及数据流程全面解析

    为什么要有OVS 1 xff09 方便网络管理与监控 OVS 的引入 xff0c 可以方便管理员对整套云环境中的网络状态和数据流量进行监控 xff0c 比如可以分析网络中流淌的数据包是来自哪个 VM 哪个 OS 及哪个用户 xff0c 这些
  • LATEX——两张图并列排列/双栏模板中图片通栏并列布局

    LATEX 两张图并列排列 双栏模板中图片通栏并列布局 正常插入图片并列插入两张图片双栏模板中图片通栏并列布局1 不同图片使用不同标题 xff0c 不同编号 双栏模板中图片通栏并列布局2 xff08 不同图片使有不同的小标题 xff0c 但
  • SUMO输出文件设置

    1 fcd浮动车数据输出 轨迹数据输出 sumo c demo sumocfg fcd output fcd1 xml 2 设置E3检测器 E3检测器简介 Multi Entry Exit Detectors xff08 E3 xff09
  • 私有地址

    私有地址 xff08 Private address xff09 属于非注册地址 xff0c 专门为组织机构内部使用 以下表列出留用的内部寻址地址 A类 10 0 0 0 10 255 255 255 B类 172 16 0 0 172 3
  • apereo CAS Server 6.2.x 和 6.4.x 的部署

    代码地址 xff0c 分别下载6 2和6 4两个版本 https github com apereo cas overlay template 版本地址 xff1a https github com apereo cas overlay t
  • 微信小程序学习第九课:总结JS页面 radio (单选)向后台传值

    1 data里增加 dengji 0 dengjiitems name 34 优 34 value 34 1 34 name 34 良 34 value 34 0 34 34 checked 34 39 true 39 name 34 中
  • 微信小程序WXSS加虚线

    cartLeft width 50 height 100rpx border right 1rpx dashed a7a8a8
  • 没见过这么恶心的,钉钉开发同一个ip只能被一个企业使用

    关键是把另外一个企业的IP改了 xff0c 还是提示 xff01 同一个ip只能被一个企业使用 创建企业自建应用 xff0c 提示 同一个ip只能被一个企业使用 xff0c 请您参考以下内容确认 xff1a 1 如果是授权定制服务商开发的应
  • Workbench的服务器公网白名单:

    登录名称 Administrator 64 139 196 54 95 3389 实例id i uf6exzqcieg2y4tvzly1 实例名称 launch advisor 20200109 登录实例失败 xff0c 原因 连接实例 i
  • 【PHP】使用mpdf生成pdf文件

    本文主要需求是将html页面转换为pdf文档 1 安装mpdf工具类 xff08 composer方式 xff09 composer require mpdf mpdf 8 0 3 2 控制器里调用 lt php public functi
  • ubuntu2004安装cuda11.7+cuDNN8.6 deb版本

    ubuntu2004安装cuda11 7 43 cuDNN8 6 deb版本 1 显卡驱动安装1 1查看驱动版本 2 安装cuda2 1安装前检查2 2下载CUDA11 72 3安装2 4设置环境变量2 5检测 3 cuDNN安装3 1下载
  • FastAdmin 插件离线安装不成功的原因

    离线安装 1 xff09 登录后台 进入插件管理 xff0c 选择本地安装或者是离线安装 2 xff09 安装时会进行压缩包验证 版本依赖 判断 xff0c 提升从官网下载压缩包 3 xff09 绕过判断 xff0c 直接安装的方式 xff
  • 微擎手机端传图总是提示4M限制修改

    app resource js app util js 这个文件里 fileSizeLimit 4194304 fileSingleSizeLimit 4194304 4194304最后加一个0就变40M了 4 1024 1024 61 4
  • 数学中的特殊符号

    正负号 xff1a 加号 xff1a 43 减号 xff1a 百分号 xff1a 等号 xff1a 61 a a xff0f b 61 a b a 0b xfe65 0 ab 61 a b a 0b 0 i 61 1 x 2 这个是x的2次
  • Ubuntu+ROS+opencv4.3.0 修改cv_bridge配置文件,解决ROS与opencv版本冲突问题

    Ubuntu18 04 43 ROS melodic 43 opencv4 3 0 修改cv bridge配置文件 xff0c 解决ROS使用不同版本opencv的冲突问题 在ros下使用opencv读取图像话题时 xff0c 在OpenC
  • Highcharts 柱状图不显示0

    Highcharts 柱状图显示0值会给人造成误解 xff0c 毕竟0值和空值是两个结果 解决方案 xff1a 将数据源 0值替换为null

随机推荐

  • FastReport模板字段为Null却显示0 ; 以及0被隐藏、不显示的解决方法

    FastReport模板字段为Null却显示0 以及0被隐藏 不显示的解决方法 字段为Null 不默认显示0 取消勾选后 xff0c null就不会显示0 数值0不隐藏 调整 xff1a 属性 HideZeros False xff0c 0
  • ASP.NET控件FileUpload实现Excel文件内容上传到数据库

    实现思路 xff1a Excel的内容并不可以直接上传到数据库 xff0c 所以先将Excel内容读取出来转化为DataSet xff0c 然后可以得到DataTable xff0c 遍历每一行 xff0c 存到数据库里就好了 前台只放了两
  • Echarts折线图平滑问题

    Echarts3 0官网上的折线图不够平滑 xff0c 有棱角 看着不舒服 xff08 个人感觉 xff09 xff0c 解决办法 xff1a 增加一个属性 smooth true name 39 最高气温 39 type 39 line
  • Visual Studio 附加到进程调试找不到问w3wp.exe的解决办法

    1 在IIS中部署好站点 xff0c 确保有一个应用程序池在跑 2 设置好断点后 xff0c 调试 gt 附加到进程 xff0c 勾选 显示所有用户的进程 xff0c 在英文输入法的状态下 xff0c 按下 W 键 xff0c 快速找到 w
  • DIV鼠标悬停显示文字

    最简洁的办法是加一个 title属性 lt div title 61 34 停止回放 34 gt lt div gt
  • OpenCV:多线程加速的多尺度模板匹配

    OpenCV中的模板匹配 matchTemplate 一直被诟病 xff0c 原因是不能多尺度识别且不能旋转识别 xff0c 后者比较复杂 xff0c 这里只讨论前者 网上多数示例都是从一张图上截取一个目标 xff0c 然后进行匹配识别 x
  • 如何快速转载CSDN中的博客

    以下内容转载自 https blog csdn net zhongjianblackberry article details 79456338 在参考 如何快速转载CSDN中的博客 后 xff0c 由于自己不懂html以及markdown
  • 5680在网设备开启端口聚合不断网的方法----我测试不断网

    在5680T做双端口聚合上行的时候 xff0c 要先给正在使用的端口开启端口聚合 比如目前使用0 19 0 端口千兆上行 xff0c 计划将0 19 0 和0 19 1的2个端口做端口聚合 xff0c 然后双千兆上行 网上查的说是直接输入
  • 正则表达式:(?:) 或 .*? 或 .+?

    一 这个代表不捕获分组 比较 X 和 X xff0c 前者是捕获分组 xff0c 后者不捕获 xff0c 区别在于正则表达式匹配输入字符串之后所获得的匹配的 xff08 数 xff09 组当中没有 X 匹配的部分 xff1b 例如 xff1
  • Maven 多个war项目的引用关系 overlay配置实例

    在Maven项目中 xff0c 一般是jar文件的依赖 xff0c 但是也要考虑一种情况 xff0c 那就是war项目的依赖 比如说base war项目包含基本的网页 xff0c 但是需要为另外有一个定制的war项目有几个页面是需要特别定制
  • NVIDIA CUDA, CUDNN, MATLAB配置

    64 NVIDIA 深度学习环境配置 配置NVIDIA GPU以支持MATLAB等计算平台进行并行计算 NVIDIA NVIDIA 支持并行计算 xff0c 可提高深度学习的计算效率 从硬件到软件的链条是 xff1a NVIDIA GPU
  • OAuth2.0四种授权模式以及Oauth2.0实战

    OAuth2 0四种授权模式以及Oauth2 0实战 首先我们得了解什么是Oauth2 0 xff0c 简单来说Oauth2 0它是一个授权协议 我们可能会听说过 xff0c 使用Oauth2 0来实现单点登录SSO xff0c 以及第三方
  • firewalld-cmd简介

    firewalld是centos7的一大特性 xff0c 最大的好处有两个 xff1a 支持动态更新 xff0c 不用重启服务 xff1b 第二个就是加入了防火墙的 zone 概念 firewalld有图形界面和工具界面 xff0c 由于我
  • hdfs创建文件夹及目录

    span class token keyword import span java span class token punctuation span io span class token punctuation span IOExcep
  • auto.js 入门学习(参考GitHub文档)

    GitHub开发文档 input span class token punctuation span span class token punctuation span i span class token punctuation span
  • python-名片管理系统

    span class token builtin class name shift span 43 F6 重命名 当修改变量名或者函数名是十分实用 from learn card manage span class token functi
  • 【linux】清理pip空间缓存

    输入命令查看内存使用情况 xff1a df h 发现 dev sda6 这个目录下可使用内存基本上没有了 xff0c 先需要对其进行清理缓存 切换到pip目录下 cd cache pip 为了防止直接删除出错 xff0c 先将要删除的文件复
  • YOLOv5 - AssertionError: Image not Found

    出现上图原因是val 路径还有中文 xff0c cv imread 不能识别 解决方法 xff1a 1 修改还有中文的文件名 2 使用绝对路径 xff0c 把测试图片放在含有中文的文件里面 下图的名称也无法读取 xff0c 可能是含有 xf
  • 机器学习-猫狗识别(入门案例)

    案例分析 xff1a 下载猫狗图片 xff0c 进行分类 对数据进行分类 xff0c 训练集和测试集 训练集和测试集都进行命名规范 xff0c 把猫标记为1 xff0c 狗标记为0 处理流程 xff1a 数据处理 xff0c 把数据处理为6
  • 车牌识别之预处理(灰度化,去噪,二值化,分割)

    灰度化 灰度即R 61 G 61 B 二值化只取255 0 对图片进行灰度化处理 xff0c 目的是 1 减少数据量 xff08 减少不明显 xff09 2 为二值化准备 对数据进行灰度发现数据量减少并不明显 尤其是 最大 和 平均 灰度法