opencv图像识别之猫脸识别
2018-05-04 本文已影响54人
采香行处蹙连钱
参考文献:
- 某博客 :https://blog.csdn.net/xingchenbingbuyu/article/details/68952868#%E4%BB%A3%E7%A0%81
- opencv github仓库:https://github.com/opencv/opencv
- opencv-python 图像识别教程:https://github.com/makelove/OpenCV-Python-Tutorial/blob/master/OpenCV-Python-Tutorial-%E4%B8%AD%E6%96%87%E7%89%88.pdf
opencv简介
- opencv是当下最流行的基于C++的开源计算机视觉库。有最简单的图像处理(比如降噪滤波、边缘检测、图像变换、特征提取等),特征提取在很多计算机图像识别领域有应用,比如车牌号识别等。高级的行人检测、人脸识别、文本识别,如QQ的文字识别功能,应该是在此基础上做的改进。
- 直接从github上下载最新的opencv库。建议使用virtualenv + python运行项目。
- 在opencv库的 samples/python/ 目录下有很多python相关的案例,在data/ 目录下有相关的训练集。直接运行python目录下的案例,如
facedetect
人脸检测等。
猫脸识别项目运行
本项目使用virtualenv+python3运行,开发环境为pycharm。如果是小白程序员,建议先补齐python基础知识和python开发环境搭建。
需要导入opencv-python库
导入opencv-python库
因为要用到cv2,因此需要导入该库,这个库是opencv使用python封装的结构的库
项目源码
# -*- coding=utf-8 -*- import cv2 # 加载猫脸检测器,此处使用data/haarcascade的猫脸识别训练集 catPath = "../data/haarcascade/haarcascade_frontalcatface.xml" faceCascade = cv2.CascadeClassifier(catPath) # 读取图片并灰度化 img = cv2.imread("cat1.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 猫脸检测 faces = faceCascade.detectMultiScale( gray, scaleFactor= 1.02, minNeighbors=3, minSize=(150, 150), flags=cv2.CASCADE_SCALE_IMAGE ) # 框出猫脸并加上文字说明 for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2) cv2.putText(img,'Cat',(x,y-7), 3, 1.2, (0, 255, 0), 2, cv2.LINE_AA) # 显示图片并保存 cv2.imshow('Cat?', img) cv2.imwrite("cat.jpg",img) c = cv2.waitKey(0)
源码解析
基于opencv的猫脸识别很简单,
detectMultiScale()
函数发挥了主要作用。此函数的作用是,在输入图像中检测不同尺寸的对象,返回包含对象的矩形框。它接收的参数: 1.image——输入图像 2.scaleFactor——表示每轮检测图像齿轮减少的比例 3.minNeighbors——指明对象要至少被检测到几次才能判定对象确实存在 4.minSize——检测对象的最小尺寸 5.maxSize——检测对象的最大尺寸
运行结果
框出头像部分。
cat.jpg
cat1.jpg该数据集的缺点:无法识别比较模糊的猫头像图片、无法识别闭着眼睛的猫头像图片