opencv 人脸识别_opencv人脸识别入门学习笔记

一、何为opencv

(百度百科哈哈哈)

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

二、opencv加载展示图片

(1)加载图片:

cv.imread(file)

(2)展示图片:

cv.imshow(winname,img)

(3)保存图片:

cv.imwrite(filename,img,params=None)

(4)实例:

import cv2 as cvimg = cv.imread('abc.jpg')  # 加载图片cv.imshow('img',img)  # 展示图片cv.waitKey(0)  # 等待键盘输入cv.destroyAllWindows()  # c++编写 释放内存

加载展示如下:

0b0e3cd21f60b8da8eccc22a631b5ba5.png

三、灰度处理及绘制矩形、圆形

opencv使用的是BGR(非传统RGB),即颜色顺序为蓝绿红

(1)灰度处理使用:

cv.cvtColor(img,cv.COLOR_BGR2GRAY)

# BGR 灰度处理img_gary=cv.cvtColor(img,cv.COLOR_BGR2GRAY)

(2)绘制矩形框:

cv.rectangle(img,(x,y),(x+w,y+h),color=(0,255,0),thickness=2)

其中(x,y)为左上角x,y坐标值

w,h为矩形的宽和高

thickness为笔画大小

(3)绘制圆形:

cv.circle(img,center=(x,y),radius=r,color=(0,0,255),thickness=3)

其中center为圆心坐标

radius为半径值

四、人脸识别

(1)加载特征数据:

官网https://opencv.org/

点击Releases

下载特征数据

使用cv.CascadeClassifier(filename)加载数据

(2)实例:

定义函数face_detect_demo()对图片中的人脸进行特征识别获取人脸位置的x,y,w,h值

import cv2 as cvdef face_detect_demo():    # 灰度处理    gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)    # 加载特征数据    face_detector = cv.CascadeClassifier('D:/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')    face = face_detector.detectMultiScale(gray)    for x,y,w,h in face:        cv.rectangle(img,(x,y),(x+w,y+h),color=(0,255,0),thickness=2)    cv.imshow('result',img)img = cv.imread('abc.jpg')# cv.imshow('img',img)face_detect_demo()cv.waitKey(0)cv.destroyAllWindows()

结果:

37adc9d3d8f0dd4793bf54bd9d44ec64.png

(3)多人脸识别调参

face_detector.detectMultiScale(gray,scaleFactor=1.01,minNeighbors=3, flags=None, minSize=None, maxSize=None)

参数说明:

scaleFactor:表示每次图片尺寸缩小比例

minNeighbors:表示至少检测次数

minSize:目标最小尺寸

maxSize:目标最大尺寸

import cv2 as cvimg = cv.imread('hei.jpg')def face_detect_demo():    # 图片灰度处理    gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)    # 特征加载    face_detector = cv.CascadeClassifier(r'D:\\opencv\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_default.xml')    faces = face_detector.detectMultiScale(gray,scaleFactor=1.02,minNeighbors=3,)    for x,y,w,h in faces:        cv.rectangle(img,(x,y),(x+w,y+h),color=(255,0,0),thickness=2)        # cv.circle(img,center=(x+w//2,y+h//2),radius=w//2,color=(0,0,255),thickness=2)        print(x,y,w,h)    cv.imshow('result',img)face_detect_demo()cv.waitKey(0)cv.destroyAllWindows()

调参前结果:

542913d4b5853604ced6cbe2422be08f.png

调参后结果:

640fc7181eddf5a5545cad865ca7dc4c.png

相校调参前,调参后识别率高了点,不过也不全(黑人太黑了,机器识别不出来?),缺点显而易见,多人脸识别需要根据实际进行调参才能获取好的识别率和准确率。(opencv入门了吧,往下是一堆数学问题头大)

学习笔记,使用借鉴了不少网络资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值