使用opencv2对人脸识别、人脸分割完整代码
时间: 2024-01-24 18:04:27 浏览: 115
sa.rar_OPENCV 代码_opencv人脸识别_人脸识别
以下是使用OpenCV对人脸识别、人脸分割的完整Python代码:
```python
import cv2
# 加载人脸识别模型
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 加载图像
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 遍历人脸并进行分割
for (x,y,w,h) in faces:
# 提取人脸区域
face_img = img[y:y+h, x:x+w]
# 转换为HSV颜色空间
hsv = cv2.cvtColor(face_img, cv2.COLOR_BGR2HSV)
# 设置肤色的HSV值范围
lower_skin = np.array([0, 20, 70], dtype=np.uint8)
upper_skin = np.array([20, 255, 255], dtype=np.uint8)
# 对图像进行二值化处理,得到皮肤区域的掩模
mask = cv2.inRange(hsv, lower_skin, upper_skin)
# 进行形态学操作,去除噪点并填充空洞
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (11, 11))
mask = cv2.erode(mask, kernel, iterations=2)
mask = cv2.dilate(mask, kernel, iterations=2)
mask = cv2.GaussianBlur(mask, (3, 3), 0)
# 对处理后的掩模进行轮廓检测,得到人脸的轮廓
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 根据轮廓信息对原图像进行人脸裁剪,得到人脸图像
for cnt in contours:
(x, y, w, h) = cv2.boundingRect(cnt)
cv2.rectangle(face_img, (x, y), (x + w, y + h), (0, 255, 0), 2)
roi = face_img[y:y + h, x:x + w]
cv2.imwrite("face.jpg", roi)
# 显示图像
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在运行代码前,需要先下载并配置好OpenCV和人脸识别模型文件。该代码可实现对图像中的人脸进行肤色分割并裁剪出人脸图像。
阅读全文