python-3.x 如何自动浏览图像文件夹并获得468个面部标志坐标,而无需手动浏览图像?

9jyewag0  于 2022-12-01  发布在  Python
关注(0)|答案(2)|浏览(109)

这是我的代码,运行起来没有任何问题。但是,我不想手动从一个图像移动到另一个图像,因为我在文件夹中有超过2000个图像。我需要编辑什么来自动运行文件夹中的图像,并获得x,y,z坐标?

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("")
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)
    cv2.imshow("image", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
iyr7buue

iyr7buue1#

一个类似

import glob

import cv2
import mediapipe as mp

facemesh = mp.solutions.face_mesh.FaceMesh(max_num_faces=1)
for file in glob.glob(...):
    img = cv2.imread(file)
    rgb_image = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    result = facemesh.process(rgb_image)
    for i, faceLms in enumerate(result.multi_face_landmarks):
        for j, lm in enumerate(faceLms.landmark):
            print(file, i, j, lm)

应将每个文件各自的标志打印到标准输出。
您可以使用shell(python script.py > foo.txt)重定向该输出,或者提出适合您的目的的更优雅的输出格式。

h7wcgrx3

h7wcgrx32#

如果我理解得很好,代码运行得很好,但是您不希望看到所有图像都弹出到屏幕上,并且每次都从一个图像转到下一个图像:仅删除CV2查看器步骤:

cv2.imshow("image", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

它应该在不打开每个图像的情况下

相关问题