版权声明:
本文首发于微信号:inn0team
此文章版权归属于 inn0team 所有,转载请保留此声明。
本机环境:
python 2.7
mac 系统
opencv 2.4.6
python版本一定要安装 2 的才行 ,版本 3 没有 cv2 库
识别图片
原图
识别后的图
#!/usr/bin/env python
# encoding: UTF-8
"""
Cteate time 2017-03-31
author: 天才小三斤
@mail: [email protected]
@blog: http://www.fucksec.com
"""
import cv2
from PIL import Image, ImageDraw
class Opencv(object):
# 初始化
def __init__(self):
# opencv 官方识别库地址 根据自己电脑路径更改
self.faces_xml = '/Users/sanjin/work/gittools/opencv/data/haarcascades/haarcascade_frontalface_default.xml'
# 人脸识别
def faces(self, img_path):
img = cv2.imread(img_path)
# 加载 官方的 识别数据
face_data = cv2.CascadeClassifier(self.faces_xml)
print img
# 判断图片维度 如果为3 证明不是灰度图 然后转化成灰度图
# 不是3 就是 2 那就是 灰度图
if img.ndim == 3:
# 转化 灰度
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
else:
gray = img
# 1.2和5是特征的最小、最大检测窗口,它改变检测结果也会改变
faces = face_data.detectMultiScale(gray, 1.2, 5)
# 创建返回list
result = []
# 进行 for 循环 把 人脸坐标 和 宽高 插入到 list
for (x, y, width, height) in faces:
result.append((x, y, x + width, y + height))
return result
# 画出人脸
def h_faces(self, img_path, save_path):
faces = self.faces(img_path)
# 判断 人脸数据 是否存在
if faces:
# 打开图片
img = Image.open(img_path)
# 声明 Draw 方法 进行 画边框
draw_instance = ImageDraw.Draw(img)
# for 循环 根据 坐标 和 宽 高 画出人脸位置 outline 颜色值
for (x1, y1, x2, y2) in faces:
draw_instance.rectangle((x1, y1, x2, y2), outline=(255, 0, 0))
# 保存图片
img.save(save_path)
if __name__ == '__main__':
# 图片地址 , 输出图片地址
Opencv().h_faces('/Users/sanjin/Desktop/1.jpg', '/Users/sanjin/Desktop/2.jpg')
本文始发于微信公众号(inn0team):python opencv 人脸识别
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论