Я делаю видеофильтр, который добавляет вам кошачьи уши, как линзы Snapchat. Я использую opencv4 и Dlib. Dlib заботится об обнаружении лица. Проблема в том, что из-за того, что координаты обнаружения немного меняются в каждом кадре, фильтр слишком волнистый.
Пробовал через каждые 2-3 кадра менять положение ушей, но мало что изменилось.
while True:
_, frame = cap.read()
ear_mask.fill(0)
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = detector(frame)
for face in faces:
ear_width, ear_height, top_left, degree = generateNewEar(frame)
frame = generateImage(frame, ear_width,
ear_height, top_left, degree)
cv2.imshow("Frame", frame)
Как люди обычно решают эту проблему?
"The problem is, because of detection, the coordinates changes a little bit every frame so the filter is too wiggly."
Я не использую Python или OpenCV, поэтому не могу показать пример кода. Несколько советов, которые вы можете попробовать.
(1) Шум камеры может влиять на обнаружение. Попробуйте мягкое размытие на входе, чтобы сгладить пиксели. Тестируйте различные уровни размытия.
(2) Попробуйте обновлять положение ушей каждую секунду, а затем настройте Икс раз в секунду.
(3) Сравнить положение уха текущего кадра с предыдущим кадром. Если расстояние слишком маленькое (1 или 2 пикселя), игнорируйте и используйте старое положение.