用PYTHON、opencv写一个将相册中不同人物的照片进行分别保存的程序
时间: 2024-03-11 14:49:54 浏览: 71
好的,下面是一个示例程序,可以实现你的需求。需要注意的是,这个程序需要用到OpenCV库和Python的os模块,因此在运行之前需要确保你已经安装了这两个库。
```python
import cv2
import os
# 创建一个字典,用于存储不同人物的照片
photos = {}
# 遍历相册中的所有照片
for filename in os.listdir('相册路径'):
# 读取照片
img = cv2.imread(os.path.join('相册路径', filename))
# 使用OpenCV的人脸检测功能识别人脸
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 如果识别到人脸
if len(faces) > 0:
# 获取人脸所在的位置信息
(x, y, w, h) = faces[0]
# 截取人脸部分的图像
face_img = img[y:y+h, x:x+w]
# 使用文件名作为人物的标识符
name = filename.split('.')[0]
# 如果这个人物还没有被添加到字典中,就创建一个新的列表来存储他的照片
if name not in photos:
photos[name] = []
# 将这张照片添加到相应的列表中
photos[name].append(face_img)
# 将每个人物的照片保存到以他的名字命名的文件夹中
for name, images in photos.items():
if not os.path.exists(name):
os.mkdir(name)
for i, image in enumerate(images):
cv2.imwrite(os.path.join(name, f'{i}.jpg'), image)
```
需要替换代码中的`相册路径`为你自己的相册路径。此外,还需要下载OpenCV自带的人脸检测器`haarcascade_frontalface_default.xml`,并将它放在代码所在的目录中,或者使用绝对路径指定它的位置。
阅读全文