一、 作业题目
- 对于资料包中的 task1.jpg 和 task.jpg 两张图片,使用 Dlib 算法进行人脸检测。并将检测出的人脸,自动抠取出来,放到图片的右上角。比如以下的效果,是图片中有一个人的时候显示的人脸局部小图图片。
- 人脸检测框修改为蓝色。
二 、实现代码和效果
代码:
import cv2
import dlib
img1 = cv2.imread(r'./task1.jpg')
img2 = cv2.imread(r'./task2.jpg')
img = img2 # 修改选项 img1 or img2
is_resize = True # 是否对图片进行压缩 True or False
y_start = 40 #贴图的位置
x_start = 40
net = dlib.get_frontal_face_detector()
faceRects = net(img)
for i, box_info in enumerate(faceRects):
x_min, y_min, x_max, y_max = box_info.left(), box_info.top(), box_info.right(), box_info.bottom()
cv2.rectangle(img, (x_min, y_min), (x_max, y_max), (255, 0, 0), 3)
w, h = int(x_max - x_min), int(y_max - y_min)
img[y_start:y_start + h, x_start:x_start + w, ...] = img[y_min:y_max, x_min:x_max, ...]
x_start += (w + 5)
cv2.putText(img, f"face_count:{len(faceRects)}", (35, 35), cv2.FONT_HERSHEY_COMPLEX_SMALL, 3, (0, 0, 255), 2)
if is_resize:
img = cv2.resize(img, (500, 600))
cv2.imshow("img", img)
cv2.waitKey(0)
效果:
为了能够完全显示,将图片进行了resize,然后显示
task1:
task2:
三 、学习心得
- 本次作业中需要实现的任务为:人脸检测、画图、抠图、贴图、写字
- 在抠图与贴图遇到一点小问题,x,y位置容易搞混