Haar特征基础及图像特征识别实例

Haar特征基本概念

写在前面:这是我在百度云上学习的资料,然后整理的一些内容,百度云链接如下:链接:https://pan.baidu.com/s/1N94Qlo8JMQpACpOWa8V2fg
提取码:7amh
Haar特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征。主要分为以下四类:边缘特征,线性特征,对角线特征,中心特征;用黑白两种矩形框组合成特征模板,在特征标题模板内用 黑色矩形像素和减去 白色矩形像素和来表示这个模版的特征值。
Haar特征基础及图像特征识别实例_第1张图片
Haar特征对人脸部的特征检测,其主要由矩形模块差值特征进行简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述在特定方向(水平、垂直、对角)上有明显像素模块梯度变化的图像结构。

Haar特征:像素的运算结果(具体值,向量,矩阵,多维数组)
特征 = 白色 - 黑色
特征 = 整个区域 * 权重 + 黑色 * 权重;
特征 = (p1 - p2 - p3 + p4)* w

Haar特征基础及图像特征识别实例_第2张图片
基于Harr + Adoboost分类器的人脸识别,源代码如下所示:

import cv2
import numpy as np
#加载load xml 参数1 file name
face_xml = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_xml = cv2.CascadeClassifier('haarcascade_eye.xml')
print('aaaa')
img = cv2.imread('face6.jpg')
cv2.imshow('src', img)
#haar gray 转化成灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#detect faces I data 检测人脸:1.灰度图片数据 2缩放系数 3目标大小
faces = face_xml.detectMultiScale(gray, 1.3, 5)
print('face=', len(faces))
#draw方框
for (x, y, w, h) in faces:
    #起点坐标。起始坐标
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
    #我们已经找到的人脸区域
    roi_face = gray[y:y+h, x:x+w]
    roi_color = img[y:y+h, x:x+w]#绘制彩色人
    eyes = eye_xml.detectMultiScale(roi_face)
    #参数1 gray
    print('eye=', len(eyes))
    for(e_x, e_y, e_w, e_h) in eyes:
        cv2.rectangle(roi_color, (e_x, e_y), (e_x+e_w, e_y+e_h), (0, 255, 0), 2)
cv2.imshow('dst', img)
cv2.waitKey(0)

调用的是Adoboost分类器的一些基础已经训练好的识别眼睛和脸的分类器,下面是经过训练好后的图片标注识别
Haar特征基础及图像特征识别实例_第3张图片
如上图所示,火箭三巨头的头像都可以完整的识别,但是眼睛有的没有识别出来,这是Adboost自带的分类器效果太差,后期我会采用大量数据集训练出来自己的分类器,从而可以增强图像特征的识别率。

你可能感兴趣的:(机器学习,Haar特征,图像特征识别,机器学习)