操作代码示例:
import cv2
img = cv2.imread(r"C:\Users\cgs\Desktop\pictures (37).jpg") # 读取人脸图像
# 加载识别人脸的级联分类器
faceCascade = cv2.CascadeClassifier(r"B:\Python_opencv_book\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), (255, 0, 255), 5) # 在图像中人脸的位置绘制方框
cv2.imshow("img", img) # 显示最终处理的效果
cv2.waitKey()
cv2.destroyAllWindows()
操作效果图像:
操作代码示例:
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(r"C:\Users\cgs\Desktop\pictures_37.jpg") # 读取人脸图像
face_img = cv2.resize(face_img, (800, 800))
glass_img = cv2.imread(r"B:\Python_opencv_book\glass.png", cv2.IMREAD_UNCHANGED) # 读取眼镜图像,保留图像类型
height, width, channel = glass_img.shape # 获取眼镜图像高、宽、通道数
# 加载级联分类器
face_cascade = cv2.CascadeClassifier(r"B:\Python_opencv_book\cascades\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() # 释放所有窗体
操作效果图像:
操作代码示例:
import cv2
img = cv2.imread(r"C:\Users\cgs\Desktop\pictures-3.jpg") # 读取人脸图像
# img = cv2.resize(img, (800, 800))
# 加载识别眼睛的级联分类器
eyeCascade = cv2.CascadeClassifier(r"B:\Python_opencv_book\cascades\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()
操作效果图像:
操作代码示例:
import cv2
img = cv2.imread(r"B:\Python_opencv_book\cat.jpg") # 读取猫脸图像
# 加载识别猫脸的级联分类器
catFaceCascade = cv2.CascadeClassifier(r"B:\Python_opencv_book\cascades\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("A cute cat.", img) # 显示最终处理的效果
cv2.waitKey()
cv2.destroyAllWindows()
操作效果图像:
在操作用图像:
操作代码示例:
import cv2
img = cv2.imread(r"B:\Python_opencv_book\monitoring.jpg") # 读取图像
# 加载识别类人体的级联分类器
bodyCascade = cv2.CascadeClassifier(r"B:\Python_opencv_book\cascades\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()
操作效果图像:
操作代码示例:
import cv2
img = cv2.imread(r"C:\Users\cgs\Desktop\pictures_10.jpg") # 读取车的图像
# 加载识别车牌的级联分类器
plateCascade = cv2.CascadeClassifier(r"B:\Python_opencv_book\cascades\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()
操作效果图像:
示例代码如下:其中Elvis1、2、3和summers1、2、3为训练样本,summers4为待识别图像。
import cv2
import numpy as np
photos = list() # 样本图像列表
labels = list() # 标签列表
photos.append(cv2.imread(r"B:\Python_opencv_book\face\summer1.png", 0)) # 记录第1张人脸图像
labels.append(0) # 第1张图像对应的标签
photos.append(cv2.imread(r"B:\Python_opencv_book\face\summer2.png", 0)) # 记录第2张人脸图像
labels.append(0) # 第2张图像对应的标签
photos.append(cv2.imread(r"B:\Python_opencv_book\face\summer3.png", 0)) # 记录第3张人脸图像
labels.append(0) # 第3张图像对应的标签
photos.append(cv2.imread(r"B:\Python_opencv_book\face\Elvis1.png", 0)) # 记录第4张人脸图像
labels.append(1) # 第4张图像对应的标签
photos.append(cv2.imread(r"B:\Python_opencv_book\face\Elvis2.png", 0)) # 记录第5张人脸图像
labels.append(1) # 第5张图像对应的标签
photos.append(cv2.imread(r"B:\Python_opencv_book\face\Elvis3.png", 0)) # 记录第6张人脸图像
labels.append(1) # 第6张图像对应的标签
names = {"0": "Summer", "1": "Elvis"} # 标签对应的名称字典
recognizer = cv2.face.EigenFaceRecognizer_create() # 创建特征脸识别器
recognizer.train(photos, np.array(labels)) # 识别器开始训练
i = cv2.imread(r"B:\Python_opencv_book\face\summer4.png", 0) # 待识别的人脸图像
label, confidence = recognizer.predict(i) # 识别器开始分析人脸图像
print("confidence = " + str(confidence)) # 打印评分
print(names[str(label)]) # 数组字典里标签对应的名字
cv2.waitKey()
cv2.destroyAllWindows()
操作结果:
recognizer = cv2.face.FisherFaceRecognizer_create(num_components=150, threshold=200.0)
# 假设 images 是包含人脸图像列表的变量,每个图像已调整为相同大小
# labels 是与每个图像对应的标签列表
recognizer.train(images, labels)
# 假设 new_face 是待识别的人脸图像,且已调整为与训练样本相同的尺寸
label, confidence = recognizer.predict(new_face)
# 输出识别结果
print(f"Recognized as person with label: {label}, confidence: {confidence}")
# 根据置信度判断识别是否成功
if confidence < 5000:
print("High confidence in recognition")
else:
print("Low confidence in recognition")
操作代码示例:
import cv2
import numpy as np
photos = list() # 样本图像列表
lables = list() # 标签列表
photos.append(cv2.imread(r"B:\Python_opencv_book\face\Mike1.png", 0)) # 记录第1张人脸图像
lables.append(0) # 第1张图像对应的标签
photos.append(cv2.imread(r"B:\Python_opencv_book\face\Mike2.png", 0)) # 记录第2张人脸图像
lables.append(0) # 第2张图像对应的标签
photos.append(cv2.imread(r"B:\Python_opencv_book\face\Mike3.png", 0)) # 记录第3张人脸图像
lables.append(0) # 第3张图像对应的标签
photos.append(cv2.imread(r"B:\Python_opencv_book\face\kaikai1.png", 0)) # 记录第4张人脸图像
lables.append(1) # 第4张图像对应的标签
photos.append(cv2.imread(r"B:\Python_opencv_book\face\kaikai2.png", 0)) # 记录第5张人脸图像
lables.append(1) # 第5张图像对应的标签
photos.append(cv2.imread(r"B:\Python_opencv_book\face\kaikai3.png", 0)) # 记录第6张人脸图像
lables.append(1) # 第6张图像对应的标签
names = {"0": "Mike", "1": "kaikai"} # 标签对应的名称字典
recognizer = cv2.face.FisherFaceRecognizer_create() # 创建线性判别分析识别器
recognizer.train(photos, np.array(lables)) # 识别器开始训练
i = cv2.imread(r"B:\Python_opencv_book\face\Mike4.png", 0) # 待识别的人脸图像
label, confidence = recognizer.predict(i) # 识别器开始分析人脸图像
print("confidence = " + str(confidence)) # 打印评分
print(names[str(label)]) # 数组字典里标签对应的名字
cv2.waitKey()
cv2.destroyAllWindows()
操作效果:
import cv2
# 创建LBPH人脸识别器
recognizer = cv2.face.LBPHFaceRecognizer_create()
# 如果需要,可以设置参数,如半径和邻居数等,但这里我们使用默认设置
# recognizer = cv2.face.LBPHFaceRecognizer_create(radius=1, neighbors=8, grid_x=8, grid_y=8)
# 假设images是预处理过(灰度化、大小调整等)的图像列表,labels是对应的标签
images = [...] # 图像列表
labels = [...] # 对应的标签列表
# 训练识别器
recognizer.train(images, labels)
# 假设test_image是待识别的图像,且已调整为与训练图像相同的大小
test_image = ... # 待识别的图像
# 预测
label, confidence = recognizer.predict(test_image)
# 打印预测结果
print(f"Predicted label: {label}, Confidence: {confidence}")
# 置信度评分小于某个阈值(例如5000)时,认为识别成功
if confidence < 5000:
print("Recognized with high confidence!")
else:
print("Low confidence recognition or unknown face.")
操作实例代码:
import cv2
import numpy as np
photos = list() # 样本图像列表
lables = list() # 标签列表
photos.append(cv2.imread(r"B:\Python_opencv_book\face\lxe1.png", 0)) # 记录第1张人脸图像
lables.append(0) # 第1张图像对应的标签
photos.append(cv2.imread(r"B:\Python_opencv_book\face\lxe2.png", 0)) # 记录第2张人脸图像
lables.append(0) # 第2张图像对应的标签
photos.append(cv2.imread(r"B:\Python_opencv_book\face\lxe3.png", 0)) # 记录第3张人脸图像
lables.append(0) # 第3张图像对应的标签
photos.append(cv2.imread(r"B:\Python_opencv_book\face\ruirui1.png", 0)) # 记录第4张人脸图像
lables.append(1) # 第4张图像对应的标签
photos.append(cv2.imread(r"B:\Python_opencv_book\face\ruirui2.png", 0)) # 记录第5张人脸图像
lables.append(1) # 第5张图像对应的标签
photos.append(cv2.imread(r"B:\Python_opencv_book\face\ruirui3.png", 0)) # 记录第6张人脸图像
lables.append(1) # 第6张图像对应的标签
names = {"0": "LXE", "1": "RuiRui"} # 标签对应的名称字典
recognizer = cv2.face.LBPHFaceRecognizer_create() # 创建LBPH识别器
recognizer.train(photos, np.array(lables)) # 识别器开始训练
i = cv2.imread(r"B:\Python_opencv_book\face\ruirui4.png", 0) # 待识别的人脸图像
label, confidence = recognizer.predict(i) # 识别器开始分析人脸图像
print("confidence = " + str(confidence)) # 打印评分
print(names[str(label)]) # 数组字典里标签对应的名字
cv2.waitKey()
cv2.destroyAllWindows()
操作效果: