千家信息网

Python OpenCV图像识别的示例分析

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,小编给大家分享一下Python OpenCV图像识别的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、人脸识别主要有以下两种实现方法:1、哈尔(Haar)级联法:专门解决人
千家信息网最后更新 2025年02月03日Python OpenCV图像识别的示例分析

小编给大家分享一下Python OpenCV图像识别的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

一、人脸识别

主要有以下两种实现方法:

1、哈尔(Haar)级联法:专门解决人脸识别而推出的传统算法;

实现步骤:

创建Haar级联器;

导入图片并将其灰度化;

调用函数接口进行人脸识别;

函数原型:

detectMultiScale(img,scaleFactor,minNeighbors)

scaleFactor:缩放尺寸;

minNeighbors:最小像素值;

代码案例:

# 创建Haar级联器facer = cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml')# 导入人脸图片并灰度化img = cv2.imread('p3.png')gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 调用接口faces = facer.detectMultiScale(gray, 1.1, 5)for (x,y,w,h) in faces:    cv2.rectangle(img, (x,y), (x+w, y+h), (0,0,255), 2)cv2.imshow('img', img)cv2.waitKey()

结论:Haar级联法对于完整脸部的检测效果还是不错的,但对于不完整脸部识别效果差,这可能也是传统算法的一个缺陷所在,泛化能力比较差;

拓展:Haar级联器还可以对脸部中细节特征进行识别

代码如下:

# 创建Haar级联器facer = cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml')eyer = cv2.CascadeClassifier('./haarcascades/haarcascade_eye.xml')# 导入人脸图片并灰度化img = cv2.imread('p3.png')gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 调用接口faces = facer.detectMultiScale(gray, 1.1, 5)i = 0for (x,y,w,h) in faces:    cv2.rectangle(img, (x,y), (x+w, y+h), (0,0,255), 2)    ROI_img = img[y:y+h, x:x+w]    eyes = eyer.detectMultiScale(ROI_img, 1.1, 5)    for (x,y,w,h) in eyes:        cv2.rectangle(ROI_img, (x,y), (x+w, y+h), (0,255,0), 2)    i += 1    name = 'img'+str(i)    cv2.imshow(name, ROI_img)cv2.waitKey()

总结:Haar级联器提供了多种脸部属性的识别,眼睛鼻子嘴巴都可以,但效果不一定那么准确;

二、车牌识别

结构:Haar+Tesseract车牌识别;

说明:Haar级联器仅用于定位车牌的位置,Tesseract用于提取其中的内容;

实现步骤:

1、Haar级联器定位车牌位置;

2、车牌预处理操作(二值化、形态学、滤波去噪、缩放);

3、调用Tesseract进行文字识别;

注意:这里需要预先安装Tesseract;

代码案例:

import pytesseract# 创建Haar级联器carer = cv2.CascadeClassifier('./haarcascades/haarcascade_russian_plate_number.xml')# 导入人脸图片并灰度化img = cv2.imread('chinacar.jpeg')gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 调用接口 cars = carer.detectMultiScale(gray, 1.1, 3)for (x,y,w,h) in cars:    cv2.rectangle(img, (x,y), (x+w, y+h), (0,0,255), 2)# 提取ROIroi = gray[y:y+h, x:x+w]# 二值化ret, roi_bin = cv2.threshold(roi, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)# 文字识别pytesseract.pytesseract.tesseract_cmd = r"D:\Tesseract_OCR\tesseract.exe"text = pytesseract.image_to_string(roi, lang='chi_sim+eng',config='--psm 8 --oem 3')print(text)cv2.putText(img, text, (20,100), cv2.FONT_HERSHEY_SIMPLEX, 2, (0,0,255), 3)cv2.imshow('img', img)cv2.waitKey()

结论:车牌的位置检测比较准确,但Tesseract的识别并不那么准确,可能用ORC识别会准确一些;当然识别的准确率也和图像处理后比较模糊有关,做一些处理能够提升文字的识别率;

三、DNN图像分类

DNN为深度神经网络,并且是全连接的形式;

注意:OpenCV能够使用DNN模型,但并不能训练;

DNN使用步骤:

读取模型,得到网络结构;

读取数据(图片或视频)

将图片转成张量,送入网络;

模型输出结果;

函数原型:

导入模型:readNet(model,[config])

图像转张量:blobFromImage(image,scalefactor,size,mean,swapRB,crop)

送入网络:net.setInput(blob)

模型推理:net.forward()

代码案例:

# 导入模型config = "./model/bvlc_googlenet.prototxt"model = "./model/bvlc_googlenet.caffemodel"net = dnn.readNetFromCaffe(config, model)# 加载图片,转成张量img = cv2.imread('./smallcat.jpeg')blob = dnn.blobFromImage(img, 1.0, (224,224), (104,117,123))# 模型推理net.setInput(blob)r = net.forward()idxs = np.argsort(r[0])[::-1][:5]# 分类结果展示path = './model/synset_words.txt'with open(path, 'rt') as f:    classes = [x[x.find(" ")+1:]for x in f]for (i, idx) in enumerate(idxs):# 将结果展示在图像上    if i == 0:        text = "Label: {}, {:.2f}%".format(classes[idx],            r[0][idx] * 100)        cv2.putText(img, text, (5, 25),  cv2.FONT_HERSHEY_SIMPLEX,            0.7, (0, 0, 255), 2)# 显示图像cv2.imshow("Image", img)cv2.waitKey(0)

看完了这篇文章,相信你对"Python OpenCV图像识别的示例分析"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

图像 图片 模型 人脸 车牌 代码 接口 灰度 网络 脸部 位置 函数 张量 效果 文字 案例 步骤 结果 示例 分析 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 移动网络安全海报 服务器往返行程是什么意思 金平区网络安全 淘宝管理系统用什么软件开发 小火山视频是哪个软件开发的 网络安全和信息化建设论文 彭涛东西湖网络安全大会 蜗居网络技术有限公司 产品总监懂软件开发么 达梦数据库关闭后更新数据未保存 连云港新品服务器供应商 微信网络数据库编程 联合国无人机数据库建设 关于校园网络安全的小品 泰米时空服务器进不去怎么办 碧蓝航线服务器在哪 java 数据库返回多条数据 网安小兵网络安全 方舟服务器地址 重庆数据网络安全工程售后服务 网易电脑版登录基岩版服务器 魔兽世界角色服务器直升错了 淘宝买的服务器怎么退款 连云港新品服务器供应商 河南综合软件开发直销价格 soul提示连接服务器失败 无人机操控软件开发人员 服务器深度 上海专业软件开发费用 外账怎么做需要什么数据库
0