【发布时间】:2022-11-26 20:17:31
【问题描述】:
目前,我有一个能够无错误运行的 python 程序。然而,它只能遍历图像的子文件夹并提取每幅图像中 468 个面部标志的 x、y、z 坐标。我想编辑它,这样程序将循环遍历许多子文件夹并读取每个子文件夹中的许多图像。 “路径”函数中需要说明什么,下面我的代码中需要编辑什么?该文件夹命名为“nopain”,子文件夹命名为“1、2、3 等...”
import os
import cv2
import mediapipe as mp
import time
from os import listdir
import matplotlib.pyplot as plt
from pathlib import Path
import glob
import numpy
path = glob.glob("C:/Users/Downloads/Mac master DB_no overlap/nopain/1/*.png")
fh = open('out.txt', 'w')
for file in path:
img = cv2.imread(file)
mpDraw = mp.solutions.drawing_utils
mpFaceMesh = mp.solutions.face_mesh
facemesh = mpFaceMesh.FaceMesh(max_num_faces=1)
drawSpec = mpDraw.DrawingSpec(thickness=1, circle_radius=2)
rgb_image = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
result = facemesh.process(rgb_image)
if result.multi_face_landmarks:
for faceLms in result.multi_face_landmarks:
mpDraw.draw_landmarks(img, faceLms, mpFaceMesh.FACEMESH_CONTOURS,
drawSpec, drawSpec)
for lm in faceLms.landmark:
print(lm, file, file = fh)
cv2.imshow("image", img)
cv2.destroyAllWindows()
fh.close()
【问题讨论】:
-
这将是难以置信的 CPU 密集型。您是否考虑过多处理?如果没有,你应该。另外,你为什么打电话cv2.imshow()在最后处理的图像上?似乎有点奇怪
-
@OldBill 抱歉,我还没有尝试过多处理,那怎么办?还有我应该把“cv2.imshow()”改成什么?
-
请不要通过删除其内容来破坏您的帖子。