Как заставить программу обнаружать цвета не на всём изображении, а только внутри обводки лица?

Написал 2 нейронные сети с помощью openCV. Одна распознаёт лицо, вторая находит цвета на фото. Как можно их объединить так, чтобы сначала находилось лицо, обводилось и внутри этой обводки обнаруживались необходимые цвета?

Нейросеть по распознаванию лиц:

import cv2
import sys

imagePath = sys.argv[1]
cascPath = "haarcascade_frontalface_default.xml"

faceCascade = cv2.CascadeClassifier(cascPath)

image = cv2.imread(imagePath)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

faces = faceCascade.detectMultiScale(
    gray,
    scaleFactor=1.1,
    minNeighbors=5,
    minSize=(30, 30),
    flags=cv2.CASCADE_SCALE_IMAGE
)

print("Found {0} faces!".format(len(faces)))

for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)

cv2.imshow("Faces found", image)
cv2.waitKey(0)

Команда запуска: python название.py название.png haarcascade_frontalface_default.xml

Нейросеть по поиску цвета:

import numpy as np
import argparse
import cv2

ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", help="path to the image")
args = vars(ap.parse_args())
image = cv2.imread(args["image"])
boundaries = [
    ([103, 86, 65], [255, 133, 128]),
    ([93, 89, 231], [140, 114, 255]),
]
for (lower, upper) in boundaries:
    lower = np.array(lower, dtype="uint8")
    upper = np.array(upper, dtype="uint8")
    mask = cv2.inRange(image, lower, upper)
    output = cv2.bitwise_and(image, image, mask=mask)
    cv2.imshow("images", np.hstack([image, output]))
    cv2.waitKey(0)

Команда запуска: python название.py --image название.png


Ответы (0 шт):