OpenCv人脸检测技术-(实现抖音特效-给人脸戴上墨镜
OpenCv相关函数说明
import cv2 # 导入OpenCv库
cv2.imread(filename # 读取图像
object = cv2.CascadeClassifier( # 括号里面填Haar级联分类器
"""
CascadeClassifier,是Opencv中做人脸检测的时候的一个级联分类器。并且既可以使用Haar,也可以使用LBP特征。Haar特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征。
"""
object.detectMultiScale(image, scaleFactor, minNeighbors
"""
detectMultiScale是CascadeClassifier的子类;
image:待分析的图像。
scaleFactor:扫描图像时缩放的比例。
minNeighbors:保留多少检测结果,该值越大误差越小。
etc...
"""
cv2.waitKey(delay # 等待用户按下键盘后等待delay毫秒
cv2.destroyAllWindows( # 销毁所有窗口
分析人脸位置
人脸检测,把图像分成一个个小块,对每一个小块判断是否是人脸,假如一张图被分成了5000块,则速度非常慢。
为了提高效率,OpenCV 提供 cascades 来避免这种情况。提供了一系列的xml文件
cascades :翻译 :小瀑布 级联
cascade 对于每个数据块,它都进行一个简单快速的检测。若过,会再进行一个更仔细的检测。该算法有 30 到 50 个这样的阶段,或者说 cascade。只有通过全部阶段,cascade才会判断检测到人脸。这样做的好处是:大多数小块都会在前几步就产生否定反馈,节约时间。
资源链接,该资源不仅仅包括人脸xml,还有其他眼睛等。赚取点积分吧。
OpenCV人脸识别xml文件.zip或者从官网Sources里找资源,data文件夹中有是特征文件,我们一般选用haarcascade_frontalface_default.xml
import cv2
img = cv2.imread("/Users/duanhao/Desktop/photo/liukun.jpg"
# 加载识别人脸的级联分析器
faceCascade = cv2.CascadeClassifier("/Applications/anaconda/anaconda3/lib/python3.9/site-packages/cv2/data/haarcascade_frontalface_default.xml"
faces = faceCascade.detectMultiScale(img, 1.15, 5
for (x, y, w, h in faces:
cv2.rectangle(img, (x, y, (x + w, y + h, (0, 0, 255, 5
cv2.imshow("image", img
cv2.waitKey(
cv2.destroyAllWindows(
给人脸戴上墨镜
准备阶段:我们可以读取视频,也可以读取人脸,这里我准备了一张含有人脸的照片;
VideoCapture类方法。
代码:
import cv2
def over_img(img, img_over, over_x, over_y:
img_h, img_w, c = img.shape
img_over_h, img_over_w, over_c = img_over.shape
if over_c == 3:
img_over = cv2.cvtColor(img_over, cv2.COLOR_BGR2BGRA
for w in range(0, img_over_w:
for h in range(0, img_over_h:
# 透明像素不能覆盖图像
if img_over[h, w, 3] != 0:
for c in range(0, 3:
x = over_x + w
y = over_y + h
if x >= img_w or y >= img_h:
break
img[y, x, c] = img_over[h, w, c]
return img
img = cv2.imread("/Users/duanhao/Desktop/photo/liukun.jpg"
glass = cv2.imread("/Users/duanhao/Desktop/photo/glass.png", cv2.IMREAD_UNCHANGED # 保留图像类型
height, weight, channel = glass.shape
# 加载人脸识别联结器
faceCascade = cv2.CascadeClassifier("/Applications/anaconda/anaconda3/lib/python3.9/site-packages/cv2/data/haarcascade_frontalface_default.xml"
face = faceCascade.detectMultiScale(img, 1.15, 4
for (x, y, w, h in face:
gw = w
gh = int(height * gw/weight
img_over_new = cv2.resize(glass, (gw, gh
img = over_img(img, img_over_new, x, y+int(h*1/3
# cv2.rectangle(img, (x, y, (x + w, y + h, (0, 0, 255, 5
cv2.imshow("screen", img
cv2.waitKey(
cv2.destroyAllWindows(
效果图:
结束语:
最后,祝所有奋斗的人都能收获到好的结果。