1.车牌检测

'''
项目名称:opencv/cv2 车牌检测 简介:
1.训练级联表 ***.xml 【跳过...】
2.用如下代码加载级联表和目标图片识别车牌 注:推荐用anconda安装opencv库
''' import cv2
detector = cv2.CascadeClassifier() #实例化检测器 detector/检测器
ret = detector.load('plate_cascade.xml') #加载级联表,注:Python加载文件需要load(加载)一下,C++不需要
# 检测级联表是否加载成功
if not ret:
print('未找到级联表/load cascade err')
quit()
# 读目标图片
img = cv2.imread('2.jpg')
#转灰度(黑白色)
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY ) #三字节颜色转一字节颜色(彩色转黑白) cvt/转换 covert
'''
颜色检测
颜色转换
色彩BGR、HVS两种格式
''' # 目标锁定盒子
boxs = detector.detectMultiScale(gray,1.01,3) #两个参数:金字塔层级系数(1~2之间,与车牌在整张图中的占比成反比;越小越检查出来的多),非相关性抑制系数
print(len(boxs)) #找到的目标的个数
for box in boxs:
x,y,w,h=box # zy 位置 wh宽高
g=img[y:y+h,x:x+w,:]
name='%d_%d_%d_%d.jpg'%(x,y,w,h)
print(name) # 输出车牌截图名称【注:坐标命名规则】
cv2.imwrite(name,g) # 打印车牌的截图

2.图片人脸检测

# 人脸识别,正则分析

import cv2
import numpy as np
from PIL import Image
#pip install PIL
#pip install opencv-python
#pip install dlib
dector=cv2.CascadeClassifier()
ret=dector.load('haarcascade_frontalface_alt_tree.xml')
if not ret:
print('未找到级联表文件:plate_cascade.xml')
exit() img=cv2.imread('e:/85n.jpg')
if img is None:
print('文件不存在')
exit()
#彩色转成灰度图像
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 正则化,亮度调成均匀的
gray=np.uint8(gray/gray.ptp()*255) boxs=dector.detectMultiScale(gray,1.015,1)
platelist=[]
for box in boxs:
x,y,w,h=box
g=img[y:y+h,x:x+w,:]
platelist.append(g)
linew=h//100+1
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),linew)
gimg=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
image=Image.fromarray(gimg)
image.show()
image.close()

3.视频人脸检测

# 人脸识别,正则分析

import cv2
import numpy as np
from PIL import Image
#pip install PIL
#pip install opencv-python
#pip install dlib
dector=cv2.CascadeClassifier()
ret=dector.load('haarcascade_frontalface_alt_tree.xml')
if not ret:
print('未找到级联表文件:plate_cascade.xml')
exit() img=cv2.imread('e:/85n.jpg')
if img is None:
print('文件不存在')
exit()
#彩色转成灰度图像
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 正则化,亮度调成均匀的
gray=np.uint8(gray/gray.ptp()*255) boxs=dector.detectMultiScale(gray,1.015,1)
platelist=[]
for box in boxs:
x,y,w,h=box
g=img[y:y+h,x:x+w,:]
platelist.append(g)
linew=h//100+1
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),linew)
gimg=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
image=Image.fromarray(gimg)
image.show()
image.close()

4.数字识别

# -*- coding: utf-8 -*-
"""
Created on Thu May 17 19:30:13 2018 @author: AI04班级
""" import cv2
import numpy as np
from PIL import Image #Python Image Lib
import skimage.feature as feature2d
import sklearn.neighbors as nhb
from sklearn.externals import joblib #对训练模型保存或读取
#cvhog=cv2.HOGDescriptor() def imgPrepare(filename):
img=cv2.imread(filename,0)
img=np.uint8(img/img.ptp()*255)
img=np.where(img>128,255,img)
img=np.where(img<=128,0,img)
img=np.bitwise_not(img)
return img def splitchar(img,axis=1):
idxrowb=np.all(img<64,axis=axis)
idxrowi=np.uint8(idxrowb).ravel()
dy=idxrowi[1:]-idxrowi[:-1]
#print(dy)
rowb=np.argwhere(dy==255).ravel()
rowe=np.argwhere(dy==1).ravel()
#print(rowb,rowe)
if axis==1:
imglines=[img[b:e+1,:] for b,e in zip(rowb,rowe)]
else:
imglines=[img[:,b:e+1] for b,e in zip(rowb,rowe)] return imglines def splitBox(img):
idxrowb=np.all(img<64,axis=1)
idxrowi=np.uint8(idxrowb).ravel()
dy=idxrowi[1:]-idxrowi[:-1]
#print(dy)
rowb=np.argwhere(dy==255).ravel()
rowe=np.argwhere(dy==1).ravel()
b=0
e=-1
if len(rowe)>0:
e=rowe[-1]+1
if len(rowb)>0:
b=rowb[0] return img[b:e,:] def myResize(img,size=(48,48)):
h,w=img.shape
bw=max(h,w)
bh=bw
bimg=np.zeros((bh,bw),np.uint8)
if bw==w:
dh=(bh-h)//2
bimg[dh:dh+h,:]=img[:,:]
else:
dw=(bw-w)//2
bimg[:,dw:dw+w]=img[:,:] bimg=cv2.resize(bimg,size)
return bimg def getHog(img,cell=(16,16),block=(3,3)):
vec=feature2d.hog(img,12,cell,block,'L2')
return vec
#main
gimg=imgPrepare('e:/sx.jpg')
lines=splitchar(gimg,axis=1)
chars=[]
for line in lines:
charlist=splitchar(line,axis=0)
cchars=[ myResize(splitBox(c)) for c in charlist]
chars.append(cchars)
chars=np.asarray(chars)
X=[]
Y=[]
y=0
for linech in chars: for ch in linech:
chhog=getHog(ch)
X.append(chhog)
Y.append(y) y+=1 KNC=nhb.KNeighborsClassifier(algorithm='ball_tree',n_neighbors=3)
KNC.fit(X,Y) joblib.dump(KNC,'knc.knn') def predict(img):
knc=nhb.KNeighborsClassifier(algorithm='ball_tree',n_neighbors=3)
knc=joblib.load('knc.knn')
lines=splitchar(img,axis=1)
chars=[]
for line in lines:
charlist=splitchar(line,axis=0)
cchars=[ myResize(splitBox(c)) for c in charlist]
chars.append(cchars) chars=np.asarray(chars) Y=[]
for linech in chars:
x=[]
for ch in linech:
chhog=getHog(ch)
x.append(chhog) y=knc.predict(x)
print(y)
Y.append(y) return Y

Python_opencv库的更多相关文章

  1. python_opencv库的学习

    一.以灰度图的形式加载彩色图像. https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_image_display/py_image_ ...

  2. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  3. TinyWeb v1.0 正式完成第一个Release版本(功能基于 libuv 跨平台库)

    使用方法很简单,很容易融入现有项目,使现有项目拥有Web网站功能和WebSocket,以及Socket直连! 并且包含了一个跨平台(windows/linux)工具集合; 嗯,也挺棒的^,^ 在项目中 ...

  4. 在 Laravel 中使用图片处理库 Integration/Image

    系统需求 PHP >= 5.3 Fileinfo Extension GD Library (>=2.0) … or … Imagick PHP extension (>=6.5.7 ...

  5. [APUE]标准IO库(下)

    一.标准IO的效率 对比以下四个程序的用户CPU.系统CPU与时钟时间对比 程序1:系统IO 程序2:标准IO getc版本 程序3:标准IO fgets版本 结果: [注:该表截取自APUE,上表中 ...

  6. [APUE]标准IO库(上)

    一.流和FILE对象 系统IO都是针对文件描述符,当打开一个文件时,即返回一个文件描述符,然后用该文件描述符来进行下面的操作,而对于标准IO库,它们的操作则是围绕流(stream)进行的. 当打开一个 ...

  7. Python标准库--typing

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 模块简介 Python 3.5 增加了一个有意思的库--typ ...

  8. Windows 常用运行库下载 (DirectX、VC++、.Net Framework等)

    经常听到有朋友抱怨他的电脑运行软件或者游戏时提示缺少什么 d3dx9_xx.dll 或 msvcp71.dll.msvcr71.dll又或者是 .Net Framework 初始化之类的错误而无法正常 ...

  9. vs2010静态链接MFC库报链接错误

    由于需要将MFC程序在其它电脑上运行,所以需要将动态链接的MFC改成静态链接,本以为很简单,没想到链接的时候出现下面的链接错误: uafxcw.lib(afxmem.obj) : error LNK2 ...

随机推荐

  1. 持续集成工具之jenkins+sonarqube做代码扫描

    上一篇我们主要聊了下代码质量管理平台sonarqube的安装部署以及它的工作方式做了简单的描述和代码扫描演示:回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13 ...

  2. centos8平台使用ip命令代替ifconfig管理网络

    一,为什么建议使用ip命令代替ifconfig? 1,ifconfig所属的net-tools包已经不再被维护了 虽然可以用,但会发生看不到部分ip等情况, [root@centos8 liuhong ...

  3. 列表的嵌套,元组和range()方法

    列表嵌套: 列表内嵌套列表 li = ['a','b',[1,2,3,["李白",'苏轼'],4,5],'c'] #取出"李白" print(li[2][3][ ...

  4. Helium文档8-WebUI自动化-wait_until等待元素出现

    前言 wait_until等待某个条件为真才继续往下执行.默认的超时时间为10s,每0.5查询一次,这俩参数选填.可以设置超时时间和轮询间隔. 可以作为添加后校验元素是否存在的场景 入参介绍 def ...

  5. MySQL 主从复制原理不再难

    上篇我们分析过 Binlog 日志的作用以及存储原理,感兴趣的可以翻阅: 一文带你了解 Binlog 日志 Binlog 日志主要作用是数据恢复和主从复制.本身就是二进制格式的日志文件,网络传输无需进 ...

  6. Unity实现代码控制音频播放

    前言 很久没说过Unity了,现在说一下Unity用代码控制音频播放 准备工作 1.需要播放的音频 2.给需要加声音的对象加Audio Source组件 3.新建Play脚本,并绑定需要播放声音的对象 ...

  7. MySQL关于月份日期的操作

    #获取当前日期 SELECT CURDATE(); #获取本月最后一天 SELECT LAST_DAY(CURDATE()); #获取本月的第一天 SELECT DATE_ADD(CURDATE(), ...

  8. 常见ascii码记忆

    常见字符的ASCII码值如下:空格的ASCII码值为32:数字0到9的ASCII码值分别为48到57:大写字母"A"到"Z"的ASCII码值分别为65到90:小 ...

  9. 阿里云MNS官方PHP版SDK缺少message tag问题处理

    最近在使用阿里云MNS官方PHP版SDK的过程中,发现发送到topic的消息,不能设置tag(其它语言版本SDK支持tag,如java,python),但在阿里云控制台页面发送是可以设置tag的. 因 ...

  10. 用一道模板题理解多源广度优先搜索(bfs)

    题目: //多元广度优先搜索(bfs)模板题详细注释题解(c++)class Solution { int cnt; //新鲜橘子个数 int dis[10][10]; //距离 int dir_x[ ...