【计算机视觉学习之CV2图像操作实战:车牌识别1】

news2024/11/25 20:42:57

基于Sobel算子的车牌识别

步骤如下

  1. 高斯模糊
  2. 图片灰度化
  3. Sobel算子
  4. 图像二值化
  5. 闭操作
  6. 膨胀腐蚀
  7. 中值滤波
  8. 查找轮廓
  9. 判断车牌区域
import cv2
# 读取图片
rawImage = cv2.imread("car1.jpg")
# 高斯模糊,将图片平滑化,去掉干扰的噪声
image = cv2.GaussianBlur(rawImage, (3, 3), 0)
# 图片灰度化
image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
# Sobel算子(X方向)
Sobel_x = cv2.Sobel(image, cv2.CV_16S, 1, 0, ksize=5)
# Sobel_y = cv2.Sobel(image, cv2.CV_16S, 0, 1, ksize=5)
absX = cv2.convertScaleAbs(Sobel_x) # 转回uint8
# absY = cv2.convertScaleAbs(Sobel_y)
# dst = cv2.addWeighted(absX, 0.8, absY, 0.2, 0)
image = absX
cv2.imshow('0', image)
# 二值化:图像的二值化,就是将图像上的像素点的灰度值设置为0或255,图像呈现出明显的只有黑和白
ret, image = cv2.threshold(image, 0, 255, cv2.THRESH_OTSU)
cv2.imshow('1', image)
# 闭操作:闭操作可以将目标区域连成一个整体,便于后续轮廓的提取。
kernelX = cv2.getStructuringElement(cv2.MORPH_RECT, (17, 5))
image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernelX)
cv2.imshow('2', image)
# 膨胀腐蚀(形态学处理)
kernelX = cv2.getStructuringElement(cv2.MORPH_RECT, (20, 1))
kernelY = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 19))
image = cv2.dilate(image, kernelX, iterations=1)
image = cv2.erode(image, kernelX, iterations=2)
image = cv2.erode(image, kernelY, iterations=2)
image = cv2.dilate(image, kernelY, iterations=1)
cv2.imshow('3', image)
# 平滑处理,中值滤波
image = cv2.medianBlur(image, 15)
cv2.imshow('4', image)
# 查找轮廓
contours, hierarchy = cv2.findContours(image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for item in contours:
    rect = cv2.boundingRect(item)
    x = rect[0]
    y = rect[1]
    weight = rect[2]
    height = rect[3]
    if weight > (height * 2):
        # 裁剪区域图片
        chepai = rawImage[y:y + height, x:x + weight]
        cv2.imshow('chepai'+str(x), chepai)
# 绘制轮廓
image = cv2.drawContours(rawImage, contours, -1, (0, 0, 255), 3)
cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1962572.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓄势赋能 数智化转型掌舵人百望云杨正道荣膺“先锋人物”

2024年,在数据与智能的双涡轮驱动下,我们迎来了一个以智能科技为核心的新质生产力大爆发时代。在数智化浪潮的推动下,全球企业正站在转型升级的十字路口。在这个充满变革的时代,企业转型升级的道路充满挑战,但也孕育着…

【OceanBase DBA早下班系列】—— obdiag 收集的 SQL Monitor Report 如何解读

1. 前言 前几天写了一篇博客,告诉大家在遇到慢SQL或者复杂的并行SQL的时候怎么高效的来收集【SQL Monitor Report】,上一篇博客的链接: OceanBase 社区 ;发出去后有不少问我这份报告咋解读。今天再出一篇博客给大家介绍下如何解…

【股票价格跨度】python刷题记录

R3-栈和队列-单调栈 有个小思路:如果用栈的话,比如a,b在c前面,然后查找c的跨度的时候,往回搜索,如果b比c小,那就可以把b的跨度加到c上,否则,继续往回查找到a----(思路貌似…

AI画笔,你的创意伙伴:6款最佳AI绘画工具推荐

在这个无限可能的时代,一个优秀的人工智能绘画软件不仅可以打破传统绘画方法的束缚,而且可以让每个热爱艺术的人都体验到创作的乐趣。那么,什么样的人工智能绘画软件才是优秀的呢?什么样的人工智能绘画软件才能生成超逼真的AI绘画…

(十)联合概率数据互联原理及应用(JPDA)

目录 前言 一、JPDA原理及算法步骤 (一)算法步骤 1.确认矩阵计算 2.确认矩阵拆分 3.互联概率计算 4.状态及协方差更新 二、仿真验证 (一)模型构建 (二)仿真结果 总结 引用文献 前言 本文主要针…

世界上速度最快的超级计算机推导出超级BC8钻石配方

BC8 超级钻石比任何已知材料都要坚硬,但它们很可能只存在于巨型系外行星的内核中。现在,世界上最强的超级计算机"前沿"已经揭开了它们形成的秘密,这一发现可能会导致在地球上生产它们。 钻石不仅是夺人眼球的珠宝,而且在…

致敬万物的解释者:丹尼尔・丹尼特(1942~2024)

2024 年 4 月 19 日,全世界最受欢迎的哲学家之一丹尼尔・丹尼特在缅因州波特兰去世。他被无数人称作是自己的哲学英雄,他的观点像一把利刃,在心智和意识领域无出其右。 巨星陨落,思想长存。让我们一起回顾他的生平,聆…

AGI|如何用Open WebUI和Ollama在本地运行大型语言模型?

在某AI产品发布会上,我们需要演示在个人PC上运行大模型的能力。为了实现这一目标,我们进行了深入的市场调研和技术评估,最终选择了Open WebUI和Ollama作为演示的核心工具。 目录 一、介绍 二、部署 三、代码展示 一、介绍 什么是Ollama …

前端代码混淆加密(使用Terser、WebpackObfuscator)

零、相关技术及版本号 "vue": "2.6.12", "vue/cli-service": "4.4.6", "javascript-obfuscator": "^4.1.1", "terser-webpack-plugin": "^4.2.3", "vue-template-compiler": &quo…

JAVA后端拉取gitee仓库代码项目并将该工程打包成jar包

公司当前有一个系统用于导出项目,而每次导出的项目并不可以直接使用,需要手动从gitee代码仓库中获取一个模板代码然后将他们整合到一起它才是一个完整的项目,所以目前我的任务就是编写一个java程序可以自动地从gitee仓库拉取下来那个模板代码…

纯前端实现导出pdf文件(服务端不参与)

大致查阅了现阶段使用较多的几种方案,,大概有以下几种方式: 一、原生window.print()方法导出pdf 二、jspdf 三、jspdf html2canvas 四、pdfmake 方案优点缺点window.print()1、兼容性最好 2、可以将任意内容导出成 pdf 文档, 甚至是非改页面上的内容1…

⑦【从0制作自己的ros导航小车:上位机篇】02、ros1多机通讯与坐标变换可视化

从0制作自己的ros导航小车 前言一、ros1多机通讯二、rviz可视化小车坐标系 系列文章: ①【从0制作自己的ros导航小车:介绍及准备】 ②【从0制作自己的ros导航小车:下位机篇】01、工程准备_标准库移植freertos ③【从0制作自己的ros导航小车&a…

Sobel Operator

什么是图像边缘? 边缘是指图像中灰度或颜色强度发生显著变化的区域。 什么是Sobel operator Sobel算子是一种用于图像处理的边缘检测算子。它通过计算图像灰度值的梯度来检测图像中的边缘。 什么情况产生梯度? 黑与白交界处。 Sobel 算子原理 计算P…

MLP多层感知机与Pytorch实现

参考文章: 1.动手学深度学习——多层感知机(原理解释代码详解)_多层感知机 代码-CSDN博客 2.4.1. 多层感知机 — 动手学深度学习 2.0.0 documentation 3.深度理解多层感知机(MLP) | 米奇妙妙屋 1. 神经网络由来 神经网…

ChatGPT指导如何完整写出研究论文的摘要

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 在学术写作中,学习如何为研究论文撰写简短且内容丰富的摘要非常重要。摘要可以让读者了解你的研究成果,快速浏览并决定是否要阅读更多内容。 但研究论文中的摘要…

Python面试宝典第23题:分发糖果

题目 n 个孩子站成一排,给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果。 (1)每个孩子至少分配到 1 个糖果。 (2)相邻两个孩子评分更高的孩子会获得更多的糖果。 请…

AI绘画SD万能模型 ControlNet Union (也称ControlNet++ 或 ControlNetPlus)!10余种控制效果一键生成!

大家好,我是画画的小强 Controlnet 可以说是目前最重要的一款 AI 绘画控制插件,可以帮我们实现轮廓、深度、动作姿势、颜色等多种控制效果。由于每种控制条件都需要调用不同的控制模型,加上 SD1.5 和 SDXL 的生态并不互通,大家肯…

【ROS 最简单教程 006/300】使用 launch 启动多个 ROS 节点

使用 launch 文件,可以一次性启动多个 ROS 节点 launch 文件编写的语法规则参见 👉 launch 文件编写 💜 💜 💜 💜 💜 简单示例如下 不使用 launch 需要启动三个命令行终端窗口,分别…

电商电子面单API对接方法

电商业务管理过程中,商家想要高效发货,使用电子面单是必不可少的,因为电子面单成本低、效率高,所以电商ERP、打单软件等这类应用对接电商电子面单API的需求量非常大。当应用通过电商电子面单API与电商平台、快递公司系统打通后&am…

Reranker技术

文章目录 Reranker技术0. 什么是RAG1. 什么是Reranker?2. Reranker在RAG技术中的应用3.使用 Reranker 的优缺点4.总结参考:知乎 Reranker技术 0. 什么是RAG 基础 RAG 的操作流程大致如下:首先,你需要将文本切分成小段&#xff0…