机器学习&全栈

opencv图像识别之猫脸识别

2018-05-04  本文已影响54人  采香行处蹙连钱

参考文献:

  1. 某博客 :https://blog.csdn.net/xingchenbingbuyu/article/details/68952868#%E4%BB%A3%E7%A0%81
  2. opencv github仓库:https://github.com/opencv/opencv
  3. 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简介
  1. opencv是当下最流行的基于C++的开源计算机视觉库。有最简单的图像处理(比如降噪滤波、边缘检测、图像变换、特征提取等),特征提取在很多计算机图像识别领域有应用,比如车牌号识别等。高级的行人检测、人脸识别、文本识别,如QQ的文字识别功能,应该是在此基础上做的改进。
  2. 直接从github上下载最新的opencv库。建议使用virtualenv + python运行项目。
  3. 在opencv库的 samples/python/ 目录下有很多python相关的案例,在data/ 目录下有相关的训练集。直接运行python目录下的案例,如facedetect 人脸检测等。
猫脸识别项目运行

本项目使用virtualenv+python3运行,开发环境为pycharm。如果是小白程序员,建议先补齐python基础知识和python开发环境搭建。

需要导入opencv-python库

  1. 导入opencv-python库

    因为要用到cv2,因此需要导入该库,这个库是opencv使用python封装的结构的库

  2. 项目源码

    # -*- 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)
    
  3. 源码解析

    基于opencv的猫脸识别很简单,detectMultiScale() 函数发挥了主要作用。

    此函数的作用是,在输入图像中检测不同尺寸的对象,返回包含对象的矩形框。它接收的参数:
    
    1.image——输入图像
    
    2.scaleFactor——表示每轮检测图像齿轮减少的比例
    
    3.minNeighbors——指明对象要至少被检测到几次才能判定对象确实存在
    
    4.minSize——检测对象的最小尺寸
    
    5.maxSize——检测对象的最大尺寸
    
    
  4. 运行结果

    框出头像部分。


    cat.jpg
    cat1.jpg
  5. 该数据集的缺点:无法识别比较模糊的猫头像图片、无法识别闭着眼睛的猫头像图片

上一篇下一篇

猜你喜欢

热点阅读