车牌识别01__车牌抠图(CNN深度学习—opencv实现方法)

一、安装依赖

1、mac安装brem
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"2、mac安装opencvbrew install opencv3、安装opencv-pythonpip3.6 install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python参考以下地址https://www.jianshu.com/p/797e5dc4a279
二、步骤解析
opencv解析图片的大概步骤1、加载图片2、把图片转化为灰度3、利用高斯模糊、中值滤波进行消除噪音点(可以理解成tensorflow中的卷积和池化)4、边缘检测5、二值化:只显示黑白效果6、进行膨胀和腐蚀,对边缘放大效果7、查找轮廓(计算轮廓面积、找到轮廓的矩阵的坐标计算长宽比例,找到现实中物体合理的比例)8、找到矩阵坐标,并根据原图进行剪切
三、代码呈现
import cv2
import numpy as np
import matplotlib.pyplot as plt

#1、imread加载图片
img = cv2.imread(‘0.jpg‘)

#2、将图像转换为灰度图

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#
#2、高斯平滑模糊
#GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT )
#Size ksize必须为正奇数
img = cv2.GaussianBlur(img, (3, 3), 0, 0, cv2.BORDER_DEFAULT)

#3、中值滤波(池化),消除噪音数据,medianBlur(InputArray src, OutputArray dst, int ksize)   ksize必须为奇数
img = cv2.medianBlur(img, 5)

#4、利用Sobel方法可以进行sobel边缘检测,突出边缘
img = cv2.Sobel(img, cv2.CV_8U, 1, 0, ksize=3)

#图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果,<150的全为黑,>150的全为白
ret, binary = cv2.threshold(img, 150, 255, cv2.THRESH_BINARY)

#膨胀,让轮廓突出
element1 = cv2.getStructuringElement(cv2.MORPH_RECT, (9, 7))
img = cv2.dilate(binary, element1, iterations=1)
#腐蚀
element2 = cv2.getStructuringElement(cv2.MORPH_RECT, (9, 1))
img = cv2.erode(img, element2, iterations=1)
#膨胀,让轮廓更明显
img = cv2.dilate(img, element1, iterations=3)

###############################################
# 查找轮廓(img: 原始图像,contours:矩形坐标点,hierarchy:图像层次)
contours, hierarchy = cv2.findContours(img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

max_ratio = -1
ratios = []
num = 0

for i in range(len(contours)):
    cnt = contours[i]

    #计算轮廓面积
    area = cv2.contourArea(cnt)
    if area < 1000:
        continue

    #四边形的最小外接矩形,得到最小外接矩形的(中心(x,y), (宽,高), 旋转角度)
    rect = cv2.minAreaRect(cnt)

    # 矩形的四个坐标(顺序不定,但是一定是一个左下角、左上角、右上角、右下角这种循环顺序(开始是哪个点未知))
    box = cv2.boxPoints(rect)
    # 转换为long类型
    box = np.int0(box)

    # 计算长宽高
    height = abs(box[0][1] - box[2][1])
    weight = abs(box[0][0] - box[2][0])
    ratio = float(weight) / float(height)
    # 正常的车牌宽高比在2.7~5之间
    if ratio > max_ratio:
        max_box = box

    if ratio > 5.5 or ratio < 2:
        continue

    num +=1
    ratios.append((max_box,ratio))

#返回就是车牌的矩阵的四个点的坐标
box = ratios[0][0]
print(box)
print(box[0,1])

ys = [box[0, 1], box[1, 1], box[2, 1], box[3, 1]]
print(ys)
xs = [box[0, 0], box[1, 0], box[2, 0], box[3, 0]]

ys_sorted_index = np.argsort(ys)
print(ys_sorted_index)
xs_sorted_index = np.argsort(xs)

# 获取x上的坐标
x1 = box[xs_sorted_index[0], 0]
print(x1)
x2 = box[xs_sorted_index[3], 0]
print(x2)

# 获取y上的坐标
y1 = box[ys_sorted_index[0], 1]
print(y1)
y2 = box[ys_sorted_index[3], 1]
#
img2 = cv2.imread(‘0.jpg‘)
# # 截取图像
img_plate = img2[y1:y2, x1:x2]
cv2.imwrite(‘test1.jpg‘, img_plate)

原文地址:https://www.cnblogs.com/allen-GC/p/10817223.html

时间: 2024-10-11 04:36:02

车牌识别01__车牌抠图(CNN深度学习—opencv实现方法)的相关文章

车牌识别 api接口车牌识别 SDK车牌识别OCR

整牌识别率高达99.7%,尤其汉字识别遥遥领先同类产品:2. 识别速度快,极致优化的车牌定位和识别算法;3. 支持牌照全,包括蓝牌.黄牌.挂车号牌.新军牌.警牌.新武警车牌.教练车牌.大使馆车牌.农用车牌.个性化车牌.港澳出入境车牌.澳台车牌.民航车牌.领馆车牌.新能源车牌等4. 车牌宽度要求低,车牌宽度≥60个像素,都不影响识别:5. 完美支持安卓系统,ios系统,支持手机ARM平台和PDA的X86架构:6.支持视频识别和拍照识别两种识别模式 移动端车牌识别技术参数 车牌识别 api接口车牌识

OpenCV学习之路——车牌识别之车牌定位

去年七月份因为学校项目需要开始接触图像处理,但那时候只是到网上找车牌识别代码,然后加入到自己的项目中,不清楚细节原理. 现在自己重新一步步实现车牌识别. 高斯模糊: 1 Mat Gaussian(Mat &img) { 2 Mat out; 3 GaussianBlur(img, out, Size(3, 3), 4 0, 0, BORDER_DEFAULT); 5 return out; 6 7 } 灰度化: 1 Mat Grayscale(Mat &img) { 2 Mat out;

车牌识别中车牌信息以及如何做车牌识别的思路整理

一.现在的国内民用车牌都是92式车牌. 其车牌的一些参数指标如下: A:总长度为440mm: B:高度为140mm: C:其中单字符的宽为45mm: D:整个车牌区域字符长度为409mm(这里在后面计算的时候方便都认为是410mm): E:字符的高度为90mm: F:第二和第三个字符之间的距离为34mm: G:其他的每两个字符之间的距离为12mm: H:其中如果出现字符"1"的话,字符“1”的宽度为13.5mm:与其他字符的相差22.5mm:两个“1”之间的距离为38.5mm: 下图为

移动端车牌识别|前端车牌识别|车牌识别前端识别

移动端前端车牌识别OCR技术是为促进人工智能化建设研发而来的SDK应用.此应用基于Android.ios平台,手机.PDA.安卓系统带200万像素以上的摄像头均适用,该移动端前端车牌识别技术sdk.Android平台提供Jar包,IOS平台提供.a静态库,从拍照识别车牌为基础,一步步研发出并且是首创出视频流OCR识别,像要像扫二维码那样去识别车牌.此OCR软件对车牌颜色.车牌号进行识别. 目前很多地方都会用到移动端前端车牌识别OCR技术,停车场出入口.路边停车.汽车保养维修.尤其是移动警务等,无

深度学习——Xavier初始化方法

"Xavier"初始化方法是一种很有效的神经网络初始化方法,方法来源于2010年的一篇论文<Understanding the difficulty of training deep feedforward neural networks>,可惜直到近两年,这个方法才逐渐得到更多人的应用和认可. 为了使得网络中信息更好的流动,每一层输出的方差应该尽量相等. 基于这个目标,现在我们就去推导一下:每一层的权重应该满足哪种条件. 文章先假设的是线性激活函数,而且满足0点处导数为1

深度学习的优化方法 总结

SGD:现在的SGD一般都指mini-batch gradient descent 最小批量梯度下降 缺点:(正因为有这些缺点才让这么多大神发展出了后续的各种算法) 选择合适的learning rate比较困难 - 对所有的参数更新使用同样的learning rate.对于稀疏数据或者特征,有时我们可能想更新快一些对于不经常出现的特征,对于常出现的特征更新慢一些,这时候SGD就不太能满足要求了 SGD容易收敛到局部最优,并且在某些情况下可能被困在鞍点 Adagrad: 对学习率进行了一个约束.

实战深度学习OpenCV(一):canny边缘检测

利用canny边缘检测,我们可以很好地得到哦一个图像的轮廓,下面是基于C++的,这是我们通过这段代码得到的结果: #include "pch.h" #include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> using namespace c

OCR移动端车牌识别SDK:打造优质APP

为了达到:方便,快捷,精准提高前端人员工作效率.增强C端用户产品体验价值和目的. OCR移动端车牌识别-即通过手机/iPad/PDA手持终端,内置摄像头视频预览(扫一扫)模式,本地离线识别保存车牌号码. OCR移动端车牌识别(利用OCR光学字符分割识别技术)通过手机/iPad/PDA手持终端,内置摄像头视频预览(扫一扫)模式,将需要识别的车牌图像文件中的车牌号码,车牌颜色,车牌类型等自动采集处理并转换成可以编辑的文本格式,供软件开发商二次编辑调用,提供车牌识别SDK软件开发包. 车牌识别 机动车

用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践

转自https://zhuanlan.zhihu.com/p/25928551 近来在同时做一个应用深度学习解决淘宝商品的类目预测问题的项目,恰好硕士毕业时论文题目便是文本分类问题,趁此机会总结下文本分类领域特别是应用深度学习解决文本分类的相关的思路.做法和部分实践的经验. 业务问题描述: 淘宝商品的一个典型的例子见下图,图中商品的标题是"夏装雪纺条纹短袖t恤女春半袖衣服夏天中长款大码胖mm显瘦上衣夏".淘宝网后台是通过树形的多层的类目体系管理商品的,覆盖叶子类目数量达上万个,商品量也