У меня есть список, этот список получает из детектора dlib:
dets = detector(frame, 0)
dets = [list(rect_to_bb(dets[0]))]
print(dets)
[[277, 294, 150, 149]]
Как я могу преобразовать этот список в Umat?
faces = cascade.detectMultiScale(gray, 1.3, 5)
print(faces)
[[259 264 182 182]]
Исключение, когда я использую список
_, landmarks = facemark.fit(gray, dets)
TypeError: Expected cv::UMat for argument 'faces'
Поддержу комментарий Дэна. Я получил ту же ошибку для аргумента points
cv2.fillConvexPoly()
(я передавал массив numpy). В моем случае решение состояло в том, чтобы просто установить dtype массива на np.int32
, поэтому нет необходимости конвертировать в UMat
.
dets = cv2.UMat(np.array(dets, dtype=np.uint8))
посмотрите на связь
Как вы думаете, почему вам нужно преобразовать его в
UMat
? Из-за сообщения об ошибке? Если это так, то это, скорее всего, проблема X-Y. Часто это сообщение появляется при сбое разрешения типов параметров. Сначала он пытается преобразовать вMat
, а со второй попытки пытаетсяUMat
, и только последний сбой приводит к ошибке (поэтому это может ввести в заблуждение). Я не удивлюсь, если все, что вам нужно, это сделатьdets
простой массив numpy вместо списка. Трудно сказать точно, поскольку правильный минимальный воспроизводимый пример отсутствует.