Python OpenCV从入门到精通——第十五章——人脸检测和人脸识别

demo01.py

import cv2

img = cv2.imread("peoples.png")  # 读取人脸图像
# 加载识别人脸的级联分类器
faceCascade = cv2.CascadeClassifier("./cascades\\haarcascade_frontalface_default.xml")
faces = faceCascade.detectMultiScale(img, 1.3)  # 识别出所有人脸
for (x, y, w, h) in faces:  # 遍历所有人脸的区域
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 5)  # 在图像中人脸的位置绘制方框
cv2.imshow("img", img)  # 显示最终处理的效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

demo02.py

import cv2

# 覆盖图像
def overlay_img(img, img_over, img_over_x, img_over_y):
    """
    覆盖图像
    :param img: 背景图像
    :param img_over: 覆盖的图像
    :param img_over_x: 覆盖图像在背景图像上的横坐标
    :param img_over_y: 覆盖图像在背景图像上的纵坐标
    :return: 两张图像合并之后的图像
    """
    img_h, img_w, img_p = img.shape  # 背景图像宽、高、通道数
    img_over_h, img_over_w, img_over_c = img_over.shape  # 覆盖图像高、宽、通道数
    if img_over_c == 3:  # 通道数小于等于3
        img_over = cv2.cvtColor(img_over, cv2.COLOR_BGR2BGRA)  # 转换成4通道图像
    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 = img_over_x + w  # 覆盖像素的横坐标
                    y = img_over_y + h  # 覆盖像素的纵坐标
                    if x >= img_w or y >= img_h:  # 如果坐标超出最大宽高
                        break  # 不做操作
                    img[y, x, c] = img_over[h, w, c]  # 覆盖像素
    return img  # 完成覆盖的图像

face_img = cv2.imread("peoples.png")  # 读取人脸图像
glass_img = cv2.imread("glass.png", cv2.IMREAD_UNCHANGED)  # 读取眼镜图像,保留图像类型
height, width, channel = glass_img.shape  # 获取眼镜图像高、宽、通道数
# 加载级联分类器
face_cascade = cv2.CascadeClassifier("./cascades2/haarcascade_frontalface_default.xml")
garyframe = cv2.cvtColor(face_img, cv2.COLOR_BGR2GRAY)  # 转为黑白图像
faces = face_cascade.detectMultiScale(garyframe, 1.3, 5)  # 识别人脸
for (x, y, w, h) in faces:  # 遍历所有人脸的区域
    gw = w  # 眼镜缩放之后的宽度
    gh = int(height * w / width)  # 眼镜缩放之后的高度度
    glass_img = cv2.resize(glass_img, (gw, gh))  # 按照人脸大小缩放眼镜
    overlay_img(face_img, glass_img, x, y + int(h * 1 / 3))  # 将眼镜绘制到人脸上
cv2.imshow("screen", face_img)  # 显示最终处理的效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

demo03.py

import cv2

img = cv2.imread("peoples.png")  # 读取人脸图像
# 加载识别眼睛的级联分类器
eyeCascade = cv2.CascadeClassifier("./cascades3\\haarcascade_eye.xml")
eyes = eyeCascade.detectMultiScale(img, 1.15)  # 识别出所有眼睛
for (x, y, w, h) in eyes:  # 遍历所有眼睛的区域
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 4)  # 在图像中眼睛的位置绘制方框
cv2.imshow("img", img)  # 显示最终处理的效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

demo04.py


import cv2
img = cv2.imread("cat.jpg")  # 读取猫脸图像
# 加载识别猫脸的级联分类器
catFaceCascade = cv2.CascadeClassifier("cascades4\\haarcascade_frontalcatface_extended.xml")
catFace = catFaceCascade.detectMultiScale(img, 1.15, 4)  # 识别出所有猫脸
for (x, y, w, h) in catFace:  # 遍历所有猫脸的区域
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 5)# 在图像中猫脸的位置绘制方框
cv2.imshow("Where is your cat ?", img)  # 显示最终处理的效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

demo05.py


import cv2
img = cv2.imread("monitoring.jpg")  # 读取图像
# 加载识别类人体的级联分类器
bodyCascade = cv2.CascadeClassifier("cascades5\\haarcascade_fullbody.xml")
bodys = bodyCascade.detectMultiScale(img, 1.15, 4)  # 识别出所有人体
for (x, y, w, h) in bodys:  # 遍历所有人体区域
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 5)# 在图像中人体的位置绘制方框
cv2.imshow("img", img)  # 显示最终处理的效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

demo06.py


import cv2

img = cv2.imread("car.jpg")  # 读取车的图像
# 加载识别车牌的级联分类器
plateCascade = cv2.CascadeClassifier("cascades6\\haarcascade_russian_plate_number.xml")
plates = plateCascade.detectMultiScale(img, 1.15, 4)  # 识别出所有车牌
for (x, y, w, h) in plates:  # 遍历所有车牌区域
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 5)  # 在图像中车牌的位置绘制方框
cv2.imshow("img", img)  # 显示最终处理的效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

zuoye.py

import cv2
import numpy as np
img1 = cv2.imread("peoples.png")
faceCascade = cv2.CascadeClassifier("./cascades\\haarcascade_frontalface_default.xml")
faces = faceCascade.detectMultiScale(img1, 1.3)
for (x, y, w, h) in faces:  # 遍历所有人脸的区域
    cv2.rectangle(img1, (x, y), (x + w, y + h), (0, 0, 255), 5)  # 在图像中人脸的位置绘制方框



def overlay_img(img, img_over, img_over_x, img_over_y):
    img_h, img_w, img_p = img.shape  # 背景图像宽、高、通道数
    img_over_h, img_over_w, img_over_c = img_over.shape  # 覆盖图像高、宽、通道数
    if img_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 = img_over_x + w
                    y = img_over_y + h
                    if x >= img_w or y >= img_h:
                        break
                    img[y, x, c] = img_over[h, w, c]  # 覆盖像素
    return img

img2 = cv2.imread("peoples.png")
glass_img = cv2.imread("glass.png", cv2.IMREAD_UNCHANGED)
height, width, channel = glass_img.shape

face_cascade = cv2.CascadeClassifier("./cascades2/haarcascade_frontalface_default.xml")
garyframe = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(garyframe, 1.3, 5)
for (x, y, w, h) in faces:
    gw = w
    gh = int(height * w / width)
    glass_img = cv2.resize(glass_img, (gw, gh))
    overlay_img(img2, glass_img, x, y + int(h * 1 / 3))
cv2.imshow("screen", img2)  # 显示最终处理的效果


img3 = cv2.imread("peoples.png")  # 读取人脸图像
# 加载识别眼睛的级联分类器
eyeCascade = cv2.CascadeClassifier("./cascades3\\haarcascade_eye.xml")
eyes = eyeCascade.detectMultiScale(img3, 1.15)  # 识别出所有眼睛
for (x, y, w, h) in eyes:  # 遍历所有眼睛的区域
    cv2.rectangle(img3, (x, y), (x + w, y + h), (0, 0, 255), 4)  # 在图像中眼睛的位置绘制方框
cv2.imshow("img", img3)  # 显示最终处理的效果




img4 = cv2.imread("cat.jpg")
catFaceCascade = cv2.CascadeClassifier("cascades4\\haarcascade_frontalcatface_extended.xml")
catFace = catFaceCascade.detectMultiScale(img4, 1.15, 4)
for (x, y, w, h) in catFace:
    cv2.rectangle(img4, (x, y), (x + w, y + h), (0, 0, 255), 5)
cv2.imshow("Where is your cat ?", img4)


import cv2
img5 = cv2.imread("monitoring.jpg")  # 读取图像
# 加载识别类人体的级联分类器
bodyCascade = cv2.CascadeClassifier("cascades5\\haarcascade_fullbody.xml")
bodys = bodyCascade.detectMultiScale(img5, 1.15, 4)  # 识别出所有人体
for (x, y, w, h) in bodys:  # 遍历所有人体区域
    cv2.rectangle(img5, (x, y), (x + w, y + h), (0, 0, 255), 5)# 在图像中人体的位置绘制方框
cv2.imshow("img", img5)  # 显示最终处理的效果



img6 = cv2.imread("car.jpg")
plateCascade = cv2.CascadeClassifier("cascades6\\haarcascade_russian_plate_number.xml")
plates = plateCascade.detectMultiScale(img6, 1.15, 4)  # 识别出所有车牌
for (x, y, w, h) in plates:  # 遍历所有车牌区域
    cv2.rectangle(img6, (x, y), (x + w, y + h), (0, 0, 255), 5)  # 在图像中车牌的位置绘制方框
cv2.imshow("img", img6)  # 显示最终处理的效果


a1 = cv2.resize(img1,(200,200))
a2 = cv2.resize(img2,(200,200))
a3 = cv2.resize(img3,(200,200))
a4 = cv2.resize(img4,(200,200))
a5 = cv2.resize(img5,(200,200))
a6 = cv2.resize(img6,(200,200))
#img_h = np.hstack((dst1,dst1))  #水平拼接
#img_v = np.vstack((dst2,dst2))  #竖直拼接
a1 = np.hstack((a1,a2,a3))
a2 = np.hstack((a4,a5,a6))
a = np.vstack((a1,a2))
cv2.imwrite("C:\\Users\\ASUS\\PycharmProjects\\pythonProject3\\Opencv\\15\\20040420.jpg", a)
cv2.imshow("20040420",a)
cv2.waitKey()
cv2.destroyAllWindows()

car.jpg
Python OpenCV从入门到精通——第十五章——人脸检测和人脸识别_第1张图片
cat.jpg
Python OpenCV从入门到精通——第十五章——人脸检测和人脸识别_第2张图片
glass.png
在这里插入图片描述
model.png
Python OpenCV从入门到精通——第十五章——人脸检测和人脸识别_第3张图片
monitoring.jpg
Python OpenCV从入门到精通——第十五章——人脸检测和人脸识别_第4张图片
peoples.png

另外还有六个cascades文件夹下的文件不便发出。

你可能感兴趣的:(OpenCV,计算机视觉基础教程,opencv,python,计算机视觉)