Python + OpenCV: cv2.imwrite

К сожалению, этот вопрос сводится к нахождению максимальной клики , что является известной сложной проблемой. Стандартные алгоритмы для этой задачи будут работать лучше, если вы предварительно обработаете график сопоставимости путем объединения наборов узлов с точно такой же моделью наблюдения. Возможно, есть другие эвристики, которые могли бы работать на вашем графике.

Чтобы пойти другим путем, возможно, вы могли бы применить алгоритм SVD, который обрабатывает недостающие данные.

18
задан 15.05.2020, 13:24

1 ответ

enter image description here enter image description here enter image description here

В качестве альтернативы , с MTCNN и OpenCV (также требуются другие зависимости, включая TensorFlow), вы можете:

1 Выполнить обнаружение лица (ввести изображение, вывести все поля обнаруженные лица):

from mtcnn.mtcnn import MTCNN
import cv2

face_detector = MTCNN()

img = cv2.imread("Anthony_Hopkins_0001.jpg")
detect_boxes = face_detector.detect_faces(img)
print(detect_boxes)

[{'box': [73, 69, 98, 123], 'trust': 0.9996458292007446, 'keypoints': {'left_eye': (102, 116), 'right_eye': (150, 114), 'nose': (129, 142), 'mouth_left': (112, 168), 'mouth_right': (146, 167)}}]

2 сохранить все обнаруженные лица в отдельных файлах :

for i in range(len(detect_boxes)):
    face_img = img[detect_boxes[i]["box"][1]:detect_boxes[i]["box"][1] + detect_boxes[i]["box"][3], detect_boxes[i]["box"][0]:detect_boxes[i]["box"][0] + detect_boxes[i]["box"][2]]
    cv2.imwrite("face-%.3d.jpg" % (i+1), face_img)

3 или Рисовать прямоугольники всех обнаруженных лиц:

for box in detect_boxes:
    pt1 = (box["box"][0], box["box"][1]) # top left
    pt2 = (box["box"][0] + box["box"][2], box["box"][1] + box["box"][3]) # bottom right
    cv2.rectangle(img, pt1, pt2, (0,255,0), 2)
cv2.imwrite("detected-boxes.jpg", img)
3
ответ дан 15.05.2020, 13:25

Теги

Похожие вопросы